如何让ASP.NET Core Web API接口路由支持双斜杠//?
可行配置方案
方案1:全局中间件处理连续斜杠
在ASP.NET Core管道中添加自定义中间件,提前将URL中的连续双斜杠替换为单个斜杠,让后续路由系统能正常匹配现有接口。
将以下代码放在app.UseRouting()之前:
app.Use(async (context, next) => { var requestPath = context.Request.Path.Value; if (!string.IsNullOrEmpty(requestPath) && requestPath.Contains("//")) { // 替换所有连续斜杠为单个斜杠 context.Request.Path = new PathString(System.Text.RegularExpressions.Regex.Replace(requestPath, @"/+", "/")); } await next.Invoke(); });
此方案全局生效,无需修改现有控制器的路由特性,所有带双斜杠的请求都会被自动修正,同时完美兼容正确格式的请求。
方案2:使用URL重写中间件
利用ASP.NET Core内置的URL重写中间件配置规则,专门处理开头的双斜杠:
若未安装相关包,先执行安装命令:
Install-Package Microsoft.AspNetCore.Rewrite
然后在管道中配置规则(需放在app.UseRouting()之前):
var rewriteOptions = new RewriteOptions() // 匹配开头的双斜杠,替换为单个斜杠 .Add(@"^//(.*)", "/$1"); app.UseRewriter(rewriteOptions);
该方案符合ASP.NET Core官方扩展方式,规则配置更灵活,可针对特定路径调整匹配逻辑。
方案说明
以上两种方案都不需要修改现有接口的路由配置,能同时支持http://domain/controller/{property}和http://domain//controller/{property}格式的请求,实现平滑过渡。等客户端NuGet包的URL生成bug修复后,直接移除中间件或重写规则即可。
内容的提问来源于stack exchange,提问作者Martin Lottering
相关产品推荐
相关产品推荐

