8

作成したカスタム エラー ハンドラに問題があります。である必要がありますが、のタグHttpModuleに追加すると開始されません。web.configsystem.webServer/modules

これは私のweb.configセクションです:

<system.webServer>
  <modules>
    <add name="AspExceptionHandler" 
         type="Company.Exceptions.AspExceptionHandler, Company.Exceptions" 
         preCondition="managedHandler" />
  </modules>
</system.webServer>

これは私のコードですHttpModule

using System;
using System.Web;
using Company.Settings;
using System.Configuration;

namespace Company.Exceptions
{
  public class AspExceptionHandler : IHttpModule
  {
    public void Dispose() { }

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

    private void ErrorHandler(object sender, EventArgs e)
    {
      HttpApplication application = (HttpApplication)sender;
      HttpContext currentContext = application.Context;

      // Gather information5
      Exception currentException = application.Server.GetLastError();
      String errorPage = "http://www.mycompaniesmainsite.com/error.html";

      HttpException httpException = currentException as HttpException;
      if (httpException == null || httpException.GetHttpCode() != 404)
      {          
        currentContext.Server.Transfer(errorPage, true);
      }
      else
      {
        application.Response.Status = "404 Not Found";
        application.Response.StatusCode = 404;
        application.Response.StatusDescription = "Not Found";
        currentContext.Server.Transfer(errorPage, true);
      }
    }
  }
}

誰かが私が間違っていることと、IIS 7 統合マネージド パイプライン モードがどのように機能するかを説明してもらえますか? 私が見つけた答えのほとんどは、HttpModulesIIS 6 の構成に関するものだったからです。

4

3 に答える 3

3

私が見る限り、あなたは正しい道を進んでいます。サイトのアプリケーション プールがマネージド パイプライン モードに設定されていることを確認しましたか?

また、組み込みの Visual Studio Web サーバー (Cassini) でこれをテストしている場合、この<system.webServer>セクションは無視されます。そこからモジュールをロードする場合は、IIS7 または IIS7.5 Express が必要です。

于 2011-05-07T00:58:00.373 に答える
0

ハンドラーがトリガーされないという同じ問題が発生していました。上記のコードに次の変更を加えることで、この問題を解決できました。新しいイベント ハンドラーを作成する代わりに、同じシグネチャを持つメソッドをそのイベントにアタッチしました。

application.Error += ErrorHandler;

これは私にとってはうまくいきますが、IIS7でハンドラーをアタッチするこの方法の背後にある理由を分析しています。

于 2012-05-16T15:21:39.607 に答える
0

私はこの問題を抱えており、customErrors をオフにしないとハンドラーがトリガーされないことがわかりました。

つまり、これは、エラー イベントを HttpModule でキャプチャするための構成で必要です。

<system.web>
    <customErrors mode="Off" />
</system.web>
于 2012-08-07T06:38:01.117 に答える