[英]Display custom error page when file upload exceeds allowed size in ASP.NET MVC
我的主要問題是,當上傳的文件超出允許的大小時,我想顯示自定義錯誤頁面(web.config中的maxRequestLength)。
上傳大文件時,在調用控制器中的上傳操作方法之前會拋出HttpException。 這是預料之中的。
我試圖在自定義屬性中捕獲異常,並在控制器中覆蓋OnException。 為什么不能在屬性或OnException方法中捕獲異常?
雖然可以在global.asax中捕獲Application_Error中的異常,但是Response.Redirect和Server.Transfer都不能用於重定向到自定義錯誤頁面。 Server.Transfer給出“未能處理子請求”錯誤,而response.redirect給出“已發送Http頭”錯誤。
有任何想法嗎?
提前致謝!
馬庫斯
在IIS7及更高版本下運行時,還有另一個參數:
<system.webServer>
<security>
<requestFiltering>
<requestLimits maxAllowedContentLength="10485760" />
</requestFiltering>
</security>
</system.webServer>
默認設置略小於30 MB。
對於大小介於maxRequestLength
和maxAllowedContentLength
之間的上傳文件,IIS7將拋出HttpException
其中包含HTTP代碼500和消息文本Maximum request length exceeded
。 拋出此異常時,IIS7會立即終止連接。 因此,只有在global.asax.cs中的Application_Error()
中處理和清除HttpException
(使用Server.ClearError()
)時,重定向此錯誤的HttpModule
才會起作用。
對於大小大於maxAllowedContentLength
上傳文件,IIS7將顯示錯誤代碼404和subStatusCode
13的詳細錯誤頁面。錯誤頁面可以在C:\\ inetpub \\ custerr \\ en-US \\ 404-13.htm中找到
對於IIS7上此錯誤的重定向,我建議改為重定向httpErrors
。 要重定向到另一個操作,請在web.config中為maxAllowedContentLength
設置一個小於maxRequestLength
值,並將以下內容添加到web.config:
<system.webServer>
<httpErrors errorMode="Custom" existingResponse="Replace">
<remove statusCode="404" subStatusCode="13" />
<error statusCode="404" subStatusCode="13" prefixLanguageFilePath=""
path="http://yoursite.com/Error/UploadTooLarge" responseMode="Redirect" />
</httpErrors>
</system.webServer>
在IIS6上運行時,我通過處理BeginRequest並使用HttpModule解決了它,並檢查httpApplication.Context.Request.Length是否大於maxRequestLength。
在重定向之前必須讀取能夠重定向整個請求。
請參閱此鏈接中的代碼示例: http : //www.velocityreviews.com/forums/t97027-how-to-handle-maximum-request-length-exceeded-exception.html
速度eviews鏈接非常有助於解決問題。 如上所述,唯一的缺點是在重定向完成之前需要讀取整個請求(和文件)。
但是它可以限制為僅在存在文件上載控件的頁面時通過這樣加載來運行
if (HttpContext.Current.Request.Url.ToString().Contains("UploadedPage.aspx")
{
//read and process page request
}
你需要制作一個自定義的HttpHandler來為你做這件事。 如果上傳大小太大(如您所知),ASP.NET將自動終止連接。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.