如何在mvc中映射多个路由

时间:2013-04-05 11:03:20

标签: c# asp.net-mvc asp.net-mvc-3

我正在使用Home控制器,默认操作为登陆。

但是对于ErrorController,默认操作应该是索引

在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);

它正在抛出错误 - 找不到行动着陆。

2 个答案:

答案 0 :(得分:2)

只需在当前路线上方添加另一条路线,以获取更具体的错误案例:

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;

答案 1 :(得分:0)

在另一个之前将它放在路由映射方法中,它将为错误控制器提供不同的默认操作。订单在这里非常重要,路线按照先到先得的原则进行匹配。

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