0

我想捕获最新的未处理错误应用程序,并在发生错误时将其重定向到错误页面。但我收到错误“找不到 RedirectToRoute 的匹配路由”。我的代码有什么问题?这是我的实现:

全球.asax

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

申请_结束

 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();
        }

错误处理器控制器

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 甚至正在执行,这意味着该路由已经与更贪婪的路由匹配(也许是默认路由?)。

所以有两件事——

1)您需要将错误处理程序路由向上移动。MVC 使用它在路由表中找到的第一个匹配路由。

2)让你的路线不那么贪婪,即:

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