如何在无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
相关产品推荐
相关产品推荐

