使用WebAPI流式传输大型文件(超过IIS 2GB)

我正在尝试将非常大的文件(> 2GB)上传到我的WebAPI应用程序(在.NET 4.5.2上运行,Windows 2012R2)。 设置httpRuntime maxRequestLength属性是没有用的,因为它只能处理小于2GB的文件。 我目前正在使用自定义的MultipartFormDataStreamProvider来读取服务器上的整个流,并且我已经使用自定义WebHostBufferPolicySelector关闭了缓冲。 我发现ASP.NET(或WebAPI)使用Hood下的HttpBufferlessInputStream,它有一个名为_disableMaxRequestLength的字段。 如果我将此值设置为true(通过reflection),我可以流式传输任何大小的文件。 然而,摆弄这些内部的这些显然不是一个好方法。 用于请求的HttpRequest类有一个名为GetBufferlessInputStream的方法,该方法具有允许禁用maxRequestLength的重载。 我的问题是:如何让WebAPI使用此重载而不是标准的重载? 有没有办法替换Default HttpRequest或HttpContext类? 或者我真的需要使用reflection来完成整个过程吗? 这是我目前用来禁用maxRequestLength的代码: private void DisableRequestLengthOnStream(HttpContent parent) { var streamContentProperty = parent.GetType().GetProperty(“StreamContent”, BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public); if (streamContentProperty == null) return; var streamContent = streamContentProperty.GetValue(parent, null); if (streamContent == null) return; var contentProperty = typeof(StreamContent).GetField(“content”, BindingFlags.Instance | BindingFlags.NonPublic); if (contentProperty == […]

C#正则表达式匹配括号内的任何内容

我想匹配括号内的任何内容,但结果也必须排除括号。 例子: 初始化(P90W) 制动器(45X) 结果: 990W 45X 注意没有圆括号的结果。 我一直在努力使这项工作,但无济于事我尝试了一些变化,但我知道这是一个简单的事情,我错过了,我不想使用替换来实现它。 var item = “Brake(45X)” Regex searchTerm = new Regex(@”\((.*)\)”); var value = (searchTerm.Match(item).Groups.Count > 0) ? searchTerm.Match(item).Groups[0].Value : string.Empty;

如何获取使用局部变量的ConstantExpression的值?

我创建了一个覆盖VisitConstant的ExpressionVisitor实现。 但是,当我创建一个利用局部变量的表达式时,我似乎无法获得变量的实际值。 public class Person { public string FirstName { get; set; } } string name = “Michael”; Expression<Func> exp = p => p.FirstName == name; 我如何在ConstantExpression中获取变量“name”的值? 我唯一能想到的是: string fieldValue = value.GetType().GetFields().First().GetValue(value).ToString(); 显然,这并不适合非常灵活…. 稍微复杂的例子如下: Person localPerson = new Person { FirstName = “Michael” }; Expression<Func> exp = p => p.FirstName == localPerson.FirstName;

.Net Code Contracts – 在哪里可以了解更多信息?

我最近在办公室里听到过关于.Net“合同”的一些讨论,然而,当我问我的一些同事时,他们不是很容易向我解释他们的用途,甚至是什么。 有没有人有任何资源,解释,也许还有他们使用的教程? 谢谢, 保罗

使用LINQ to SQL进行更新的最有效方法

我可以更新下面函数中给出的员工记录,还是首先要查询员工集合,然后更新数据? public int updateEmployee(App3_EMPLOYEE employee) { DBContextDataContext db = new DBContextDataContext(); db.App3_EMPLOYEEs.Attach(employee); db.SubmitChanges(); return employee.PKEY; } 或者我必须做以下事情? public int updateEmployee(App3_EMPLOYEE employee) { DBContextDataContext db = new DBContextDataContext(); App3_EMPLOYEE emp = db.App3_EMPLOYEEs.Single(e => e.PKEY == employee.PKEY); db.App3_EMPLOYEEs.Attach(employee,emp); db.SubmitChanges(); return employee.PKEY; } 但我不想使用第二种选择。 有没有有效的方法来更新数据? 我通过两种方式得到此错误: 已尝试附加或添加非新的实体,可能已从另一个DataContext加载。 这不受支持。

自定义自动resize的WPF Panel类

我正在尝试通过覆盖MeasureOverride和ArrangeOverride为WPF编写自定义Panel类,但是,虽然它主要工作,但我遇到了一个我无法解释的奇怪问题。 特别是,在确定了他们的尺寸应该是什么之后,我在ArrangeOverride调用我的子项目时,它们的大小不是我给它们的大小,并且看起来是在尺寸上调整到尺寸传递到MeasureOverride的Measure方法。 我错过了这个系统应该如何工作的东西吗? 我的理解是,调用Measure只会让孩子根据提供的availableSize评估其DesiredSize ,并且不应该影响它的实际最终大小。 这是我的完整代码(面板,顺便说一句,旨在以最节省空间的方式安排孩子,为不需要它的行提供更少的空间,并在其余部分之间平均分配剩余空间 – 它目前仅支持垂直方向,但我打算一旦我正常工作就加水平): 编辑:感谢您的回复。 我马上就会仔细研究它们。 但是,让我澄清我的预期算法是如何工作的,因为我没有解释。 首先,想到我正在做的最好的方法是想象一个Grid,每行设置为*。 这样可以均匀地划分空间。 但是,在某些情况下,行中的元素可能不需要所有空间; 如果是这种情况,我想占用任何剩余空间并将其分配给可以使用该空间的那些行。 如果没有行需要任何额外的空间,我只是尝试均匀地extraSpace事物(这就是extraSpace正在做的事情,它只适用于那种情况)。 我这两次通过。 第一遍的最终点是确定行的最终“正常大小” – 即将缩小的行的大小(给定小于其所需大小的大小)。 我这样做是通过将最小项目逐步调整到最大值并在每一步调整计算出的正常大小,方法是将每个小项目的剩余空间添加到每个后续较大项目,直到没有更多项目“适合”然后中断。 在下一个过程中,我使用此正常值来确定项目是否适合,只需将正常大小的Min与项目所需的大小相对应即可。 (为简单起见,我还将匿名方法更改为lambda函数。) 编辑2:我的算法似乎在确定孩子的正确大小方面非常有用。 然而,孩子们只是不接受他们给定的尺寸。 我通过传递PositiveInfinity并返回Size(0,0)来尝试Goblin建议的MeasureOverride ,但是这会让孩子们自己绘制,好像根本没有空间限制。 对此不明显的部分是由于调用Measure发生的事情。 微软关于这个主题的文档并不清楚,因为我已多次阅读每个类和属性描述。 但是,现在很清楚调用Measure实际上会影响孩子的渲染,因此我将尝试将这些逻辑分解为BladeWise建议的两个函数。 解决了!! 我搞定了。 正如我所怀疑的,我需要对每个孩子调用两次Measure()(一次评估DesiredSize,另一次评估每个孩子的正确身高)。 我似乎很奇怪,WPF中的布局会以如此奇怪的方式设计,它会分成两个通道,但是测量通道实际上做了两件事:测量和大小的子项和编程通道几乎没有任何实际的物理定位孩子们。 非常离奇。 我将在底部发布工作代码。 首先,原始(破碎)代码: protected override Size MeasureOverride( Size availableSize ) { foreach ( UIElement child in Children ) child.Measure( availableSize ); […]

asp.net MVC RC1 RenderPartial ViewDataDictionary

我正在尝试使用ViewData将ViewData对象从母版页传递给视图用户控件。 问题是ViewDataDictionary没有在我尝试它的方式中返回视图用户控件中的任何值。 下面的示例代码仅使用匿名对象进行演示,尽管此方法或传递ViewData对象都ViewData 。 以下是我正在尝试使用的RenderPartial辅助方法: 并在我看来用户控制我执行以下操作: 为什么这不会返回任何东西? 谢谢你的帮助。 编辑: 我能够毫无问题地传递和访问强类型模型。 这是我试图用来传递的ViewDataDictionary只说模型之外的一个值…

Code First与Database First

我基于现有数据库创建了一个entity framework模型,然后从模型中生成了POCO实体。 我的web.config中的连接字符串不是entity framework,它只是标准连接字符串(它缺少CSDL,SSDL,MSL引用)。 我可以编译我的应用程序,但是当我运行时,我收到此错误: 如果在Code First模式下使用,使用T4模板为Database First和Model First开发生成的代码可能无法正常工作。 要继续使用Database First或Model First,请确保在执行应用程序的配置文件中指定了Entity Framework连接字符串。 要使用从Database First或Model First生成的这些类,使用Code First添加任何其他配置,使用属性或DbModelBuilder API,然后删除引发此exception的代码 我的问题是,在我的代码中,它实现了POCO来自自动生成,我怎样才能让它像Code First一样? 我不想在我的连接字符串中引用CSDL等。

如何获取Windows资源管理器显示的文件类型图标?

第一个问题在这里 我正在开发一个用C#(.NET 3.5)编写的程序,它在listview中显示文件。 我想让“大图标”视图显示Windows资源管理器用于该文件类型的图标,否则我将不得不使用这样的现有代码: private int getFileTypeIconIndex(string fileName) { string fileLocation = Application.StartupPath + “\\Quarantine\\” + fileName; FileInfo fi = new FileInfo(fileLocation); switch (fi.Extension) { case “.pdf”: return 1; case “.doc”: case “.docx”: case “.docm”: case “.dotx”:case “.dotm”: case “.dot”:case “.wpd”: case “.wps”: return 2; default: return 0; } } 上面的代码返回一个整数,用于从我填充了一些常用图标的图像列表中选择一个图标。 它工作正常,但我需要在阳光下添加每个扩展! 有没有更好的办法? 谢谢!

使用Web窗体进行ASP.NET路由

我读过ASP.NET Routing … Goodbye URL重写? 和使用路由使用WebForms是很棒的文章,但仅限于简单的,说明性的,“hello world” – 复杂的例子。 是否有人以非平凡的方式使用ASP.NET路由与Web表单? 有什么需要注意的吗? 性能问题? 进一步推荐阅读我应该先看看我自己的实现? 编辑找到这些额外有用的URL: 如何:使用Web窗体路由(MSDN) ASP.NET路由(MSDN) 如何:从路由构建URL(MSDN)