Asp.net mvc 4 mvc4中的多路由

Asp.net mvc 4 mvc4中的多路由,asp.net-mvc-4,routing,asp.net-mvc-routing,Asp.net Mvc 4,Routing,Asp.net Mvc Routing,我希望在我的应用程序中有多条路由,我正在使用以下代码 routes.MapRoute( name: "Custom", url: "{lang}/{action}/{id}/{Title}/{type}", defaults: new { controller = "Main", action = "Default", id = UrlParamete

我希望在我的应用程序中有多条路由,我正在使用以下代码

     routes.MapRoute(
        name: "Custom",
        url: "{lang}/{action}/{id}/{Title}/{type}",
        defaults: new
        {
            controller = "Main",
            action = "Default",
            id = UrlParameter.Optional,
            Title = UrlParameter.Optional,
            lang = "en",
            type = UrlParameter.Optional
        }
    );
    routes.MapRoute(
        name: "Default",
        url: "{controller}/{action}/{id}",
        defaults: new
        {
            controller = "Admin",
            action = "Login",
            id = UrlParameter.Optional
        }
    );
问题 这适用于/en/Default/id/title/type此处默认为我的操作名。
当是user/Admin/Login时,则其抛出服务器错误

我认为您必须为此使用路由约束

可能是下面。它没有经过测试,但路由约束可以解决您的问题

routes.MapRoute(
        name: "Custom",
        url: "{lang}/{action}/{id}/{Title}/{type}",
        defaults: new
        {
            controller = "Main",
            action = "Default",
            id = UrlParameter.Optional,
            Title = UrlParameter.Optional,
            lang = "en",
            type = UrlParameter.Optional
        },
        new { lang= "[en|us]"}
       }

这在两种情况下都可以正常工作

            routes.MapRoute(
                "Custom",
                "{lang}/{action}/{id}/{Title}/{type}",
                new
                {
                    controller = "Main",
                    action = "Default",
                    id = UrlParameter.Optional,
                    Title = UrlParameter.Optional,
                    lang = "en",
                    type = UrlParameter.Optional
                }, new { lang = @"(en)|(hi)|(es)" }
            );
            routes.MapRoute(
                "Default",
                "{controller}/{action}/{id}",
              new
              {
                  controller = "Main",
                  action = "Default",
                  id = UrlParameter.Optional
              }
          );

我们无法以这种方式添加新的{lang=[en|us]}。请尝试将默认路由移到上面。