.NET Core 2.2 MVC网站URL加尾斜杠,需排除Admin区域的实现咨询
.NET Core 2.2 MVC 实现URL尾斜杠全局添加并排除Admin区域
你当前用的RouteOptions.AppendTrailingSlash是全局生效的配置,没法直接跳过Admin区域的URL。要实现需求,推荐用URL重写中间件来精准控制规则,具体步骤如下:
1. 修改全局路由配置
先移除原来的AppendTrailingSlash设置,避免和重写规则冲突:
services.Configure<RouteOptions>(options => { options.LowercaseUrls = true; // 注释或删除这一行:options.AppendTrailingSlash = true; });
2. 添加URL重写规则
在Startup.cs的Configure方法中,注册重写中间件并配置规则,只给非Admin区域的URL添加尾斜杠:
using Microsoft.AspNetCore.Rewrite; public void Configure(IApplicationBuilder app, IHostingEnvironment env) { // 保留你原有的其他中间件(比如UseStaticFiles、UseAuthentication等) // 配置重写规则 var rewriteOptions = new RewriteOptions(); // 正则规则:排除/admin开头的URL,给其他末尾无斜杠的URL加尾斜杠 rewriteOptions.AddRewrite(@"^(?!/admin)(.*[^/])$", "$1/", skipRemainingRules: true); app.UseRewriter(rewriteOptions); // 你的MVC路由配置 app.UseMvc(routes => { routes.MapRoute( name: "default", template: "{controller=Home}/{action=Index}/{id?}"); routes.MapAreaRoute( name: "Admin", areaName: "Admin", template: "admin/{controller=Home}/{action=Index}/{id?}"); }); }
规则说明
- 正则表达式
^(?!/admin)(.*[^/])$:(?!/admin):负向前瞻,直接跳过所有以/admin开头的URL(.*[^/]):匹配所有末尾不是斜杠的有效路径
- 重写后的路径为
$1/,即原路径末尾添加斜杠 - 确保
UseRewriter放在UseMvc之前,这样重写后的URL能被MVC路由正确解析
内容的提问来源于stack exchange,提问作者Sangeet Shah
相关产品推荐
相关产品推荐

