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

ASP.NET Core 6/7中URL路由参数编码解码的配置设置问询

ASP.NET Core 6/7中URL路由特殊字符的处理配置

针对路由参数包含反斜杠的场景,ASP.NET Core 6/7提供了以下几种方式控制特殊字符的处理与编码行为:

1. 允许路由参数包含反斜杠

默认情况下,ASP.NET Core路由参数的允许字符集不包含反斜杠(\),需通过配置添加该字符:
在Program.cs的路由服务配置中添加:

builder.Services.AddRouting(options =>
{
    options.AllowedCharacters.Add('\\');
});

配置后,路由参数可直接接收包含反斜杠的值:第三方客户端传递的Category1%5CSubCategory会被服务器自动解码为Category1\SubCategory;Swagger传递的Category1\\SubCategory(客户端转义后实际传输为单个反斜杠)也能被正常解析。

2. 调整Swagger的参数编码行为

若要让Swagger采用URL编码而非反斜杠转义的方式传递参数,可通过自定义操作过滤器实现:
首先定义过滤器类:

public class EncodeSpecialCharactersOperationFilter : IOperationFilter
{
    public void Apply(OpenApiOperation operation, OperationFilterContext context)
    {
        if (operation.Parameters == null) return;
        
        foreach (var param in operation.Parameters)
        {
            if (param.Name == "categories" && param.In == ParameterLocation.Path)
            {
                // 指定参数采用URI组件编码方式
                param.Encoding = new OpenApiEncoding { Style = ParameterStyle.Simple };
                // 同步更新示例值为URL编码格式
                if (param.Example != null)
                {
                    param.Example = new OpenApiString(Uri.EscapeDataString(param.Example.ToString()));
                }
            }
        }
    }
}

然后在Swagger服务配置中注册该过滤器:

builder.Services.AddSwaggerGen(c =>
{
    c.SwaggerDoc("v1", new OpenApiInfo { Title = "你的API名称", Version = "v1" });
    c.OperationFilter<EncodeSpecialCharactersOperationFilter>();
});

配置后,Swagger生成请求时会自动对categories参数进行URL编码(将\转为%5C)。

3. 全局自定义路径解码逻辑

如果需要更灵活的解码控制,可通过中间件手动处理请求路径:

app.Use(async (context, next) =>
{
    // 手动解码路径中的URL编码字符
    var decodedPath = Uri.UnescapeDataString(context.Request.Path.Value ?? string.Empty);
    context.Request.Path = new PathString(decodedPath);
    await next();
});

注意该中间件需放在路由中间件(app.UseRouting())之前,确保路径先被处理再进入路由匹配流程。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 07:25:23