"routes.LowercaseUrls = true;" 不起作用?

Sta*_*tan 18 c# asp.net asp.net-mvc asp.net-mvc-4 .net-4.5

我在默认情况下将路由设置为小写时遇到问题.由于某种原因,它不起作用.我知道我可以自己设置authorizehome小写,但Admin部分(区域)仍然可以大写.

@Html.ActionLink("Hello World", "Authorize", "Home")
输出到
<a href="/Admin/Home/Authorize">Hello World</a>

区域路线

public override void RegisterArea(AreaRegistrationContext context)
        {
            context.Routes.LowercaseUrls = true;
            context.MapRoute(
                "Admin_default",
                "Admin/{controller}/{action}/{id}",
                new { controller = "Home", action = "Index", id = UrlParameter.Optional },
                new string[] { "OR.Areas.Admin.Controllers" }
            );
            context.Routes.LowercaseUrls = true;
        }
Run Code Online (Sandbox Code Playgroud)

默认路线

public static void RegisterRoutes(RouteCollection routes)
        {
            routes.LowercaseUrls = true;
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
            routes.LowercaseUrls = true;
            routes.MapRoute(
                name: "Localization",
                url: "{lang}/{controller}/{action}/{id}",
                defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional },
                namespaces: new string[] { "OR.Controllers" }
            );
            routes.LowercaseUrls = true;
            routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}/{id}",
                defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional },
                namespaces: new string[] { "OR.Controllers" }
            );

            routes.LowercaseUrls = true;
        }
Run Code Online (Sandbox Code Playgroud)

管理区配置我试过

// admin/Home/Authorize
public override void RegisterArea(AreaRegistrationContext context)
{
    context.Routes.LowercaseUrls = true;
    context.MapRoute(
        "Admin_default",
        "{area}/{controller}/{action}/{id}",
        new { area = "admin", controller = "home", action = "Index", id = UrlParameter.Optional },
        new string[] { "ORMebeles.Areas.Admin.Controllers" }
    );
    context.Routes.LowercaseUrls = true;
}

// admin/Home/Authorize
public override void RegisterArea(AreaRegistrationContext context)
{
    context.Routes.LowercaseUrls = true;
    context.MapRoute(
        "Admin_default",
        "admin/{controller}/{action}/{id}",
        new { controller = "home", action = "Index", id = UrlParameter.Optional },
        new string[] { "ORMebeles.Areas.Admin.Controllers" }
    );
    context.Routes.LowercaseUrls = true;
}
Run Code Online (Sandbox Code Playgroud)

编辑

因为看起来这是MVC4的错误 - 当你设置context.Routes.LowercaseUrls = true;并且你有区域/区域context.Routes.LowercaseUrls = true;不会产生任何影响,我们应该在哪里报告它或我们如何才能修复它?

Sta*_*tan 6

这是与MVC4相关的错误,将在MVC5版本中修复.Routes.LowercaseUrls不影响区域.更多信息在这里.

同时,你可以使用LowercaseRoutesMVCLowercaseRoutesMVC4如果你需要的WebAPI的支持.