0

統合モードで実行されている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統合モードで実行されているカスタムエラーページで、処理された例外への参照を取得するにはどうすればよいですか?

4

1 に答える 1

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();
}
于 2010-03-23T21:52:52.323 に答える