报告ASP.NET MVC视图中超出的最大请求长度

时间:2010-09-10 10:04:52

标签: asp.net-mvc exception-handling file-upload

我正在使用自定义HTTPModule来检查发布的请求的大小。如果它大于给定的大小,我想停止请求但仍然使用适当的错误消息呈现视图。

我希望重复使用它很简单,因此在我的操作中可能在模型上有一个ValidationAttribute?

之前是否有人这样做并有任何指示?

1 个答案:

答案 0 :(得分:0)

问题在于显示页面可能需要部分请求,因此停止整个请求意味着您可能无法显示该视图。

在我们的例子中,这是使用ValidateAntiForgeryTokenAttribute,这会引发异常,因为你去了动作并且请求没有包含所需的数据。

有一些解决方案可以从请求中删除文件,这意味着asp.net不会耗尽内存,但这意味着您仍在处理传入流,并且您必须设置限制就在这个地方

<!-- Max 4MB -->
<httpRuntime maxRequestLength="4960"/> 

这是你告诉asp.net抛出一个摇摆而不处理请求的地方,你可以用通常的方式捕获413错误并显示错误页面,或者什么。 (以上是默认的afaik)

我们在这里做的是通过检查基本控制器中的Request.ContentLength并设置模型错误来添加另一个设置MaxContentLength,高于此值并在“摇摆不定”下面我们可以说“它太大了”

if (Request.ContentLength
        > Settings.Default.MaxContentLength * 1024) {
    ModelState.AddModelError("_Form", Resources.MaximumSizeRequestExceeded);
}

现在,我的行动中的Model.IsValid将为false

这不是理想的,但有一些解释性文字,大小限制在......可行