1

MSDNのドキュメントには次のように書かれています。

HttpContext.RemapHandlerメソッド-リクエストのハンドラーを指定できます。

最初のハンドラーの条件に応じて、リクエストの処理をあるハンドラーから別のハンドラーに移動しようとしています。HttpContext.RemapHandlerメソッドは、2番目のハンドラーのインスタンスを初期化しているようですが、HttpHandler.ProcessRequestメソッドを呼び出していません。応答は空です。

HttpContext.RemapHandlerメソッドは、私が考えていることを実行しますか?処理を新しいHttpHandlerに転送し、HttpHandler.ProcessRequestメソッドを呼び出しますか?または、別のメソッドやHttpModuleなどの別のアプローチを使用する必要がありますか?

編集:HTTPHandlerFactoryを使用する必要があることがわかりました。私は今、解決策がうまく機能しています。

では、HttpContext.RemapHandlerは正確には何のためにあるのでしょうか?

4

1 に答える 1

6

指定したとおりに使用できますHttpContext.RemapHandlerが、別のHttpHandler呼び出し(たとえば、登録するRemapHandlerASP.NET MVC )が発生した場合、起動することはありません。これがおそらく呼び出されなかった理由です。MvcHandlerPostResolveRequestCacheIHttpModuleIHttpHandler.Process

これが問題である場合は、次のMvcApplication.RegisterRoutesように無視するルートを定義するだけです。

routes.IgnoreRoute("your_path/{*pathInfo}");

また、Visual Studio Web Development ServerおよびIIS6では、機能しRemapHandlerないことに注意してください。

統合パイプラインがアクティブ化されていて、セッションにアクセスできるかどうかに基づいて、ハンドラーを再マップする正しい方法を選択する方法の例を次に示します。

public void Init(HttpApplication application)
{
  if (HttpRuntime.UsingIntegratedPipeline)
    // For IIS 7 and IIS 8
    application.PostAuthorizeRequest += Application_PostAuthorizeRequest;
  else
    // For IIS 6
    application.PostMapRequestHandler += Application_PostMapRequestHandler;
}

private void Application_PostAuthorizeRequest(object sender, EventArgs e)
{
    ((HttpApplication)sender).Context.RemapHandler(_myHandler);
}

private void Application_PostMapRequestHandler(object sender, EventArgs e)
{
    ((HttpApplication)sender).Context.Handler = _myHandler;
}

HttpHandlerFactoryこの場合とを使用することの違いHttpModuleは、後者を使用するとIHttpHandler、ASP.NETIHttpHandlerマッピングに関係なく、どちらをいつ使用するかを決定できることです。MSDNの詳細:HTTPハンドラーとHTTPモジュールの概要

于 2012-03-14T23:24:18.340 に答える