2012-03-01 26 views
1

MSDNドキュメントの内容は次のとおりです。HttpContext.RemapHandlerは要求を処理するハンドラを変更する必要がありますか?

HttpContext.RemapHandlerメソッド - 要求のハンドラを指定できるようにします。

最初のハンドラの条件によっては、要求の処理をあるハンドラから別のハンドラに移そうとしています。 HttpContext.RemapHandlerメソッドは、2番目のハンドラのインスタンスを初期化するようですが、HttpHandler.ProcessRequestメソッドを呼び出さないようです。応答は空です。

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

EDIT: 私はHTTPHandlerFactoryを使用する必要があります。私は今、うまく機能しているソリューションを持っています。

HttpContext.RemapHandlerとは何ですか?あなたが指定されているよう

答えて

6

あなたは他の自分のIHttpModuleが起動することはありませんRemapHandlerPostResolveRequestCacheMvcHandlerを登録するなどASP.NET MVC)を呼び出しHttpHandlerがあれば、HttpContext.RemapHandlerを使用することができます。これはおそらくIHttpHandler.Processが呼び出されたことがない理由です。

これはあなたの問題である場合は、単にこのようなMvcApplication.RegisterRoutesに無視するルートを定義することができます。

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

また、Visual Studioのウェブ開発サーバーと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は、ASP.NET IHttpHandlerのマッピングにかかわらず、いつIHttpHandlerを使用するかを決定できるということです。 MSDNに関する詳細:HTTP Handlers and HTTP Modules Overview

+0

明確な答え、特にmvcハンドラに関する部分! Thnx! –

+0

.NET 2.0 Service Pack 2が適用されている場合、RemapHandlerはPostAuthorizeRequestで正常に動作します。 –

関連する問題