2011-10-05 47 views
0

我有一个MVC3网站,允许用户上传图片。如果用户尝试上传大于我的web.config中的允许值的图像,则会给出404响应。我正在使用FileUpload控件。当用户提交表单并且文件太大时,会得到404响应。当文件大小超过限制时,如何在文件上载时拦截HTTP 404响应?

这里是一个article讨论如何解决这个问题,但它只是说明如何增加文件的最大尺寸。我不想增加尺寸,而是在使用时给用户一个友好的信息。

我想它返回之前拦截这个响应,这样我就可以给他们一个友好的消息,解释为什么他们不能上传文件。

这可能吗?

+0

应该说不是一个413回应? – hypercrypt

+0

HTTP错误404.13 - 找不到 请求筛选模块被配置为拒绝超过所述请求的内容长度的请求。 –

回答

2

是抛出异常,你可以在Global.asax Application_Error事件中抢?

我不确定你提到的这个特定的FileUpload控件是什么,但是对于一个普通的MVC3应用程序,当我上传文件时,Visual Studio Web服务器(“cassini”)以504错误作出响应。当上传的文件太大时,框架会抛出HttpException异常。你可以抓住它,像这样:

protected void Application_Error() 
     { 
      var ex = Server.GetLastError(); 

      if (ex.Message == "Maximum request length exceeded.") 
      { 
       //respond another way. 
      } 
     } 

本文是针对大文件上传的危险一个很好的参考:http://weblogs.asp.net/jgalloway/archive/2008/01/08/large-file-uploads-in-asp-net.aspx

+0

我试过这个解决方案。我的Application_Error()没有被击中。我收到这个异常HTTP错误404.13。我假设这是来自IIS,并没有进入我的应用程序。我尝试从我的“上传”操作中抛出一个异常,但它也没有发现。我的全局过滤器虽然适用于我抛出的异常,所以它显示共享错误视图。 –

0

看到这个答案,它增加了每个响应之前的响应检查,但它的工作:https://stackoverflow.com/a/15532171/1033228

另外,您不需要增加最大上传大小的尺寸(进一步比你期望的最大值),从而打开自己可达DOS攻击。

相关问题