2011-08-11 7 views
0

私はhttpmoduleからリダイレクトしようとしました。私は、次のコードを用意してhttpModulesセクションにリンクしています。このエラーイベントは期待どおりに発生しますが、これは/ Error/Indexページには反映されませんでした。asp.net mvc 2、httpmodule routedataリダイレクト

public class MyHttpModule : IHttpModule { 
    public void Dispose() { } 

    public void Init(HttpApplication context) { 

     context.Error += delegate { 
      var exception = context.Server.GetLastError(); 
      context.Response.Clear(); 
      context.Response.TrySkipIisCustomErrors = true; 
      context.Server.ClearError(); 

      var routeData = new RouteData(); 
      routeData.Values.Add("controller", "Error"); 
      routeData.Values.Add("action", "Index"); 

      IController errorController = new ErrorController(); 
      errorController.Execute(new RequestContext(new HttpContextWrapper(HttpContext.Current), routeData)); 
     }; 
    } 
} 

してくださいアドバイス、 おかげ

答えて

1

は、私は、新しいASP.NET MVC 2およびASP.NET MVC 3アプリケーションを作成しました。

新しいHttpModuleを追加してコードをコピー/貼り付けました。

新しいHttpModuleをWeb.configに登録しました。

<?xml version="1.0"?> 
<configuration> 
    <system.web> 
     <httpModules> 
      <add name="MyHttpModule" 
       type="MvcApplication.MyHttpModule, MvcApplication" /> 
     </httpModules> 
    </system.web> 
</configuration> 

私は例えば、私のコントローラのアクションのいずれかの方法で例外をスロー:

throw new InvalidOperationException("An exception occured."); 

未処理の例外が私は問題なくエラー/インデックスページにリダイレクトが発生するたびに。

HttpModuleを正しく登録しましたか?モジュールが正しく登録されていない場合、記述された動作しか得られません。 Visual Studio開発Webサーバー(Cassini)とIIS 7.Xでは、Web.configのさまざまなセクションにHttpModuleを登録する必要があることに注意してください。

IIS 7.xのために使用してください:

<?xml version="1.0"?> 
<configuration> 
    <system.webServer> 
     <modules> 
      <add name="MyHttpModule" 
       type="MvcApplication.MyHttpModule, MvcApplication" /> 
     </modules> 
    </system.webServer> 
</configuration> 
+0

私はポスト、リダイレクトを使用していて、取得したパターンを。問題は、EndRequestイベントがPostに対してエラーを投げることです。だから、別のページにリダイレクトするので、エラーページを表示する機会はありません。このような状況をどのように処理すればよいか分かりません。私がErrorController + RouteDataとues Response.Redirect( "...")を使用しないとうまくいきます。とても興味深い! – Fei

関連する問題