簡體   English   中英

IIS7集成管道模式下的異常處理

[英]Exception Handling in IIS7 Integrated Pipeline Mode

我有一個以集成模式運行的IIS7上托管的應用程序。 我通過將以下內容放入Web.config處理錯誤:

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

(因為這是集成模式,所以未使用<customErrors>塊。)

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

Dim oEx As Exception = Server.GetLastError()

但是它什么也不會返回。 我還嘗試了HttpContext.Current.Error()和HttpContext.Current.AllErrors,但它們都不起作用。

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

您需要在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();
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM