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

如何在无web.config的ASP.NET MVC Core中启用双重转义?

嘿,这个场景我熟!在ASP.NET Core里确实不再依赖传统的web.config来做这类配置了,咱们可以通过代码配置或者针对IIS托管的生成web.config两种方式解决,具体看你的部署环境:

1. 代码层面配置(适用于Kestrel或IIS托管)

在你的Program.cs(如果是旧版.NET Core用的是Startup.cs)里,直接通过服务配置来开启双重转义:

针对IIS服务器配置

如果你的应用是部署在IIS上(或者用IIS Express调试),添加以下代码到服务配置段:

var builder = WebApplication.CreateBuilder(args);

// 配置IIS服务器选项,允许双重转义
builder.Services.Configure<IISServerOptions>(options =>
{
    options.RequestFiltering.AllowDoubleEscaping = true;
});

// 其他服务注册(比如AddControllersWithViews)...

var app = builder.Build();

// 中间件配置(比如UseRouting、UseAuthorization等)...

app.Run();

针对Kestrel服务器配置

如果用的是Kestrel(默认开发环境用的就是这个),Kestrel默认其实允许双重转义,但如果你的路由对特殊字符有严格限制,可以通过配置路由选项来放宽:

builder.Services.Configure<RouteOptions>(options =>
{
    // 关闭斜杠字符编码,也能帮助处理URL中的+号这类特殊字符
    options.EncodeSlashCharacters = false;
    // 如果需要,还可以关闭路由的严格编码检查
    options.SuppressCheckForUnhandledSecurityMetadata = true;
});

另外,还可以给包含电话号码的路由添加正则约束,明确允许+号:

app.MapControllerRoute(
    name: "edit-phone",
    pattern: "Edit/{phone}",
    defaults: new { controller = "YourController", action = "Edit" },
    constraints: new { phone = @"^\+?\d+$" } // 匹配带+号的电话号码
);

2. 部署到IIS时的web.config配置

如果你是发布到IIS环境,虽然开发时项目里没有web.config,但发布后会自动生成一个,你可以手动修改它,添加和传统MVC一样的配置段:

<configuration>
  <system.webServer>
    <security>
      <requestFiltering allowDoubleEscaping="true" />
    </security>
  </system.webServer>
</configuration>

或者你也可以在项目根目录手动创建一个web.config文件,发布时会自动包含进去。

这样配置后,你的URL里的+123这类带特殊字符的参数就能正常被解析啦!

内容的提问来源于stack exchange,提问作者Kurkula

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 07:55:18