我正在使用自定义HTTPModule来检查发布的请求的大小。如果它大于给定的大小,我想停止请求但仍然使用适当的错误消息呈现视图。
我希望重复使用它很简单,因此在我的操作中可能在模型上有一个ValidationAttribute?
之前是否有人这样做并有任何指示?
答案 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
这不是理想的,但有一些解释性文字,大小限制在......可行