0

最新の未処理のエラー アプリケーションをキャッチし、エラーが発生するたびにエラー ページにリダイレクトしたいと考えています。しかし、「RedirectToRoute に一致するルートが見つかりませんでした」というエラーが表示されました。私のコードの問題は何ですか?これが私の実装です:

Global.asax

routes.MapRoute(
        "ErrorHandler",
        "{ErrorHandler}/{action}/{errMsg}",
       new {controller="ErrorHandler", action = "Index", errMsg = UrlParameter.Optional }
       );

Application_End

 protected void Application_Error(object sender, EventArgs e)
        {
            var strError = Server.GetLastError().Message;
            if (string.IsNullOrWhiteSpace(strError)) return;
            Response.RedirectToRoute("ErrorHandler", new {controller="ErrorHandler", action = "Index", errMsg = strError });
            this.Context.ClearError();
        }

ErrorHandler コントローラ

public class ErrorHandlerController : Controller
    {

        public ActionResult Index(string errMsg)
        {
            ViewBag.Exception = errMsg;
            return View();
        }

    }

ホームコントローラーでエラーハンドラーをテストするには

public class HomeController : Controller
    {
        public ActionResult Index()
        {
            //just intentionally added this code so that exception will occur
            int.Parse("test");
            return View();
        }
    }

更新しました

「コントローラー」の誤字。drchに感謝します。それでも、「RedirectToRoute に一致するルートが見つかりませんでした」というエラーが表示されました。

4

1 に答える 1

4

ルート定義に問題があるはずです。

あなたが持っているルート:

routes.MapRoute(
    "ErrorHandler",
    "{ErrorHandler}/{action}/{errMsg}",
   new {controller="ErrorHandler", action = "Index", errMsg = UrlParameter.Optional }
   );

非常に熱心で、問題を引き起こします。これは、http://yoursite/anything/anything/*. HomeController.Index も実行されているため、ルーティングがさらに貪欲なルート (おそらくデフォルトのルート) と既に一致していることを意味します。

だから2つのことがあります -

1) エラー ハンドラ ルートを上に移動する必要があります。MVC は、ルート テーブルで最初に一致したルートを使用します。

2) ルートの貪欲さを減らします。つまり:

routes.MapRoute(
    "ErrorHandler",
    "ErrorHandler/{action}/{errMsg}",
   new {controller="ErrorHandler", action = "Index", errMsg = UrlParameter.Optional }
   );
于 2013-02-01T02:51:02.280 に答える