如何在ASP.NET Core 7 MVC中统一将所有路由(含区域和身份认证)转为小写?
解决ASP.NET Core路由转小写问题
确保路由配置顺序与正确性
在Program.cs中,需在添加控制器/页面服务之前完成路由选项配置,两种有效配置方式如下:
// 方式1:通过AddRouting直接配置 builder.Services.AddRouting(options => { options.LowercaseUrls = true; // 若需同时将查询字符串转为小写,可开启此行 // options.LowercaseQueryStrings = true; }); // 后续添加控制器服务 builder.Services.AddControllersWithViews();
// 方式2:通过Configure配置路由选项 builder.Services.Configure<RouteOptions>(options => { options.LowercaseUrls = true; }); builder.Services.AddRouting(); builder.Services.AddControllersWithViews();
必须使用框架URL生成工具
如果视图或代码中是硬编码的链接(如<a href="/Admin/Home">),LowercaseUrls设置不会生效,必须使用框架提供的URL生成方法:
- Razor视图中使用
Url.Action:
<a href="@Url.Action("Home", "Admin")">后台首页</a>
或使用RouteLink:
@Html.RouteLink("后台首页", new { controller = "Admin", action = "Home" })
- 控制器中生成URL:
var url = Url.Action("Home", "Admin");
检查端点路由配置
确认UseEndpoints配置未覆盖默认路由规则:
app.UseEndpoints(endpoints => { endpoints.MapControllerRoute( name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"); });
修正自定义路由属性
如果控制器或Action上使用了[Route]属性硬编码大写路径(如[Route("Admin/Home")]),需将属性路由改为小写:
[Route("admin/home")] public IActionResult Home() { return View(); }
内容的提问来源于stack exchange,提问作者ASAP Coder
相关产品推荐
相关产品推荐

