在ASP.NET 4中,这与应用程序的routes.LowercaseUrls = true;
处理程序中的RegisterRoutes
一样简单。
我无法在ASP.NET Core中找到实现此功能的等效项。我想它会在这里:
app.UseMvc(configureRoutes =>
{
configureRoutes.MapRoute("Default", "{controller=App}/{action=Index}/{id?}");
});
但是configureRoutes
中没有任何内容可以允许它...除非在某个地方找到我在文档中找不到的扩展方法吗?
答案 0 :(得分:113)
对于ASP.NET Core:
将以下行添加到ConfigureServices
类的Startup
方法。
services.AddRouting(options => options.LowercaseUrls = true);
感谢Skorunka作为评论的答案。我认为值得推广到实际的答案。
答案 1 :(得分:12)
正如其他答案所示,添加:
services.Configure<RouteOptions>(options => options.LowercaseUrls = true);
前
services.AddMvc(...)
效果很好,但我还想补充一点,如果你使用Identity,你还需要:
services.AddIdentity<IdentityUser, IdentityRole>(options =>
{
var appCookie = options.Cookies.ApplicationCookie;
appCookie.LoginPath = appCookie.LoginPath.ToString().ToLowerInvariant();
appCookie.LogoutPath = appCookie.LogoutPath.ToString().ToLowerInvariant();
appCookie.ReturnUrlParameter = appCookie.ReturnUrlParameter.ToString().ToLowerInvariant();
});
显然,如果需要,请将IdentityUser
和IdentityRole
替换为您自己的类。
我刚刚使用.NET Core SDK 1.0.4和1.0.5运行时进行了测试。
答案 2 :(得分:11)
找到了解决方案。
在程序集中:Microsoft.AspNet.Routing
和Microsoft.Extensions.DependencyInjection
命名空间,您可以使用ConfigureServices(IServiceCollection services)
方法执行此操作:
services.ConfigureRouting(setupAction =>
{
setupAction.LowercaseUrls = true;
});
答案 3 :(得分:9)
从 ASP.NET Core 2.2 起,您还可以使用小写的ConstraintMap
来使您的路由变为虚线,这将使您的路由/Employee/EmployeeDetails/1
到/employee/employee-details/1
的/employee/employeedetails/1
。
为此,请在ConfigureServices
类的Startup
方法中:
services.AddRouting(option =>
{
option.ConstraintMap["slugify"] = typeof(SlugifyParameterTransformer);
option.LowercaseUrls = true;
});
SlugifyParameterTransformer
类应如下所示:
public class SlugifyParameterTransformer : IOutboundParameterTransformer
{
public string TransformOutbound(object value)
{
// Slugify value
return value == null ? null : Regex.Replace(value.ToString(), "([a-z])([A-Z])", "$1-$2").ToLower();
}
}
并且路由配置应如下:
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller:slugify}/{action:slugify}/{id?}",
defaults: new { controller = "Home", action = "Index" });
});
这将使/Employee/EmployeeDetails/1
到达/employee/employee-details/1
答案 4 :(得分:1)
对于身份,@Jorge Yanes Diez答案在ASP.NET Core 2.2
中不起作用(我认为是2.x ),因此,如果您使用Identity和ASP.NET Core 2.2(2 .x)是解决方法:
services.ConfigureApplicationCookie(options =>
{
options.LoginPath = "/account/login";
options.ReturnUrlParameter = "returnurl";
...
});
答案 5 :(得分:0)
我在RegisterRoutes :: RouteConfig上有这个
routes.LowercaseUrls = true;
答案 6 :(得分:0)
值得注意的设置:
services.Configure<RouteOptions>(options => options.LowercaseUrls = true);
不影响查询字符串。
要确保查询字符串也是小写,请将 options.LowercaseQueryStrings
设置为 true
:
services.Configure<RouteOptions>(options =>
{
options.LowercaseUrls = true;
options.LowercaseQueryStrings = true;
});
但是,仅当 true
也是 options.LowercaseUrls
时,将此属性设置为 true
才有意义。如果 options.LowercaseQueryStrings
为 options.LowercaseUrls
,则忽略 false
属性。