2010-01-01 35 views
3

我正在IIS 7上用C#開發一個ASP.NET站點,但我希望這個答案也適用於IIS 6。本網站的一部分是可以一次上傳5張圖片。我有一個很好的算法來調整上傳到我的最佳尺寸和比例的圖像。在IIS中處理IIS級別的錯誤處理

所以我唯一真正的大小限制是在初始上傳期間。我修改了我的web.config,將數據包限制從4MB提高到了32MB。在大多數情況下,這照顧我的問題。

我的問題來了在極少數情況下,一個用戶試圖加載比我的極限。我可以提高限制,但用戶總能找到5個更大的文件。如果用戶選擇較大的文件,我的try/catch塊不處理該錯誤。該錯誤來自IIS。

因此,如何能趕上我在C#代碼中的錯誤,我可以進行修改,以我的ASP.NET接口告知用戶選擇更小的文件,而不是他們看到討厭的錯誤畫面?

回答

6

當超過請求長度時,您可以訪問異常。使用HttpModule,併爲Error事件添加一個處理程序。

例外的類型爲:System.Web.HttpUnhandledException(帶有InnerException類型爲System.Web.HttpException)。

爲了趕上這個例外,它添加到你的web.config:

<httpModules> 
    <add name="ErrorHttpModule" type="ErrorHttpModule"/> 
</httpModules> 

這個類添加到您的App_Code文件夾:

public class ErrorHttpModule : IHttpModule 
{ 
    private HttpApplication _context; 

    public ErrorHttpModule() { 
    } 

    private void ErrorHandler(Object sender, EventArgs e) 
    { 
     Exception ex = _context.Server.GetLastError(); 

     //You can also call this to clear the error 
     //_context.Server.ClearError(); 
    } 

    #region IHttpModule Members 

    public void Init(HttpApplication context) 
    { 
     _context = context; 
     _context.Error += new EventHandler(ErrorHandler); 
    } 

    public void Dispose() 
    { 
    } 

    #endregion 
} 
+0

現貨,這正是你需要做的。 –

2

如果您使用的是傳統的ASP:FileUpload控件,那麼就沒有之前檢查文件的大小的方式。但是,您可以使用Flash或Silverlight方法。已經向我建議的一個選項是Uploadify

+0

謝謝Justen,這看起來像一個體面的控制。我對此進行了評估,但沒有將其作爲解決方案進行檢查,因爲我仍然希望獲得IIS級別的修復。 –

1

我不確定這是否可行,但至少在IIS 7中,您可以嘗試在配置爲運行靜態文件的HttpModule中捕獲Error事件。從那裏,你可以重定向到一個合適的錯誤頁面。

1

可以在全球捕捉這些(全球。 asax.cs文件)。添加一個Application_Error處理程序 - 你將得到一個HttpUnhandledException。它的InnerException將是一個HttpException,消息「超出最大請求長度」。

但是,這些錯誤是在您的頁面代碼被加載或執行之前處理的,因此您的頁面無法捕獲異常或知道它發生過。捕捉到此異常後,您可以在會話中粘貼消息以供稍後顯示。您也可以從Global調用response.Redirect以顯示新頁面,或使用Session中的錯誤消息重新顯示原始內容。