您不能发送大于maxContentLength
设置的请求。Web 服务器将在它有机会到达您的应用程序之前就终止该请求,并为您提供处理此错误的可能性。因此,如果您想处理它,您将不得不将值maxContentLength
增加到一个相当大的数字,然后在您的控制器操作中检查ContentLength
上传文件的值。
[HttpPost]
public ActionResult MyAction(MyViewModel model, HttpPostedFileBase document)
{
if (document != null && document.ContentLength > MAX_ALLOWED_SIZE)
{
ModelState.AddModelError("document", "your file size exceeds the maximum allowed file size")
return View(model);
}
...
}
但显然更清洁的解决方案是在您的视图模型中直接处理这个问题。您不需要 HttpPostedFileBase 参数。这就是视图模型的用途:
public class MyViewModel
{
[MaxFileSize(MAX_ALLOWED_SIZE)]
public HttpPostedFileBase Document { get; set; }
... some other properties and stuff
}
其中 MaxFileSize 显然是您可以轻松实现的自定义属性。
现在您的 POST 操作变得更加标准:
[HttpPost]
public ActionResult MyAction(MyViewModel model)
{
if (!ModelState.IsValid)
{
return View(model);
}
...
}
你可以看看我写的下面的例子。