2011-10-05 50 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攻擊。

相關問題