2009-07-12 37 views
0

我有一個運行在集成模式下的IIS7上託管的應用程序。我通過將以下到Web.config中的錯誤處理:(因爲這是整合模式的<的customErrors>未使用的塊)IIS7集成管道模式下的異常處理

<httpErrors errorMode="DetailedLocalOnly" existingResponse="Replace" 
      defaultResponseMode="ExecuteURL" defaultPath="/Error.aspx"> 
    <remove statusCode="500" /> 
    <error statusCode="500" path="/Error.aspx" responseMode="ExecuteURL" /> 
</httpErrors> 

我想要一個每次都自動發送電子郵件生成異常。但問題是,在Error.aspx中,我無法弄清楚如何獲得對異常的引用。我試過這個:

Dim oEx As Exception = Server.GetLastError() 

但它返回Nothing。我也嘗試過HttpContext.Current.Error()和HttpContext.Current.AllErrors,這些都不起作用。

在IIS7集成模式下運行的自定義錯誤頁面中,如何獲取對已處理異常的引用?

回答

0

你需要攔截的錯誤,無論是在Global.asax中或自定義的IHttpModule實現如下:

public class UnhandledExceptionHandlerModule : IHttpModule { 
    private HttpApplication application; 

    public void Init(HttpApplication application) 
    { 
     this.application = httpApplication; 
     this.application.Error += Application_Error; 
    } 

    public void Dispose() 
    { 
     application = null; 
    } 

    protected internal void Application_Error(object sender, EventArgs e) 
    { 
     application.Transfer("~/Error.aspx"); 
    } 
} 

然後,在Error.aspx.cs:

protected void Page_Load(object sender, EventArgs e) { 
    Response.StatusCode = 500; 

    // Prevent IIS from discarding our response if 
    // <system.webServer>/<httpErrors> is configured. 
    Response.TrySkipIisCustomErrors = true; 

    // Send error in email 
    SendEmail(Server.GetLastError()); 

    // Prevent ASP.NET from redirecting if 
    // <system.web>/<customErrors> is configured. 
    Server.ClearError(); 
} 
相關問題