2

我有 Home 控制器,默认操作为登陆。

但是对于 ErrorController 默认操作应该是 index

在 Global.cs 的 RegisterRoutes 方法中,我是这样写的:-

        routes.MapRoute(
            "Default", // Route name
            "{controller}/{action}/{id}", // URL with parameters
            new { controller = "Home", action = "Landing", id = UrlParameter.Optional }

但是当我试图从 Application_Error 事件重定向到错误时: -

Exception error = Server.GetLastError();                    
string redirectUrl = "~/Error/id=" + errorId;
HttpContext.Current.Server.ClearError();
HttpContext.Current.Response.Redirect(redirectUrl);

它抛出错误 - 找不到动作着陆。

4

2 回答 2

3

对于更具体的错误情况,只需在当前路线上方添加另一条路线:

routes.MapRoute(
            "Error", // Route name
            "Error/{action}/{id}", // URL with parameters
            new { action = "Index", id = UrlParameter.Optional }

另外,这看起来有点奇怪:

string redirectUrl = "~/Error/id=" + errorId;

似乎它会更多这样:

string redirectUrl = "~/Error?id=" + errorId;
于 2013-04-05T11:06:47.173 回答
0

把它放在你的路由映射方法中,放在另一个之前,它会给错误控制器一个不同的默认操作。顺序在这里很重要,路线以先到先得的方式匹配。

routes.MapRoute(
        "Error", // Route name
        "Error/{action}/{id}", // URL with parameters
        new { controller = "Error", action = "index", id = UrlParameter.Optional }
于 2013-04-05T11:09:21.600 回答