You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 03:10:48