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

向ASP.NET Core端点传递含+号的URL路径参数失败求助

解决ASP.NET Core路径参数含+号的请求失败问题

针对你遇到的路径参数含+号(已编码为%2B)但请求在进入控制器前失败的问题,可通过以下几种方案解决:


方案1:修改路由模板,使用通配符捕获参数

将路由参数改为{fileName*}和{urlKey*},通配符*允许路由系统捕获包含特殊字符的完整路径段,确保编码后的%2B能被正确解码:

[HttpGet("GetFileDownloadLink/{fileName*}/{urlKey*}")]
public IActionResult GetFileDownloadLink(string fileName, string urlKey)
{
    // fileName 会被自动解码为 "a+b.pdf"
    return Ok(fileService.GetDownloadLink(fileName, urlKey));
}

方案2:配置路由选项允许特殊字符

在Program.cs中配置RouteOptions,明确允许路径中包含未转义的特殊字符(如+、%):

builder.Services.Configure<RouteOptions>(options =>
{
    // 允许路径中包含未转义的特殊字符
    options.AllowUnescapedCharactersInPath = true;
});

方案3:IIS部署时允许双重转义

如果你的API部署在IIS或IIS Express上,IIS默认会拦截包含%2B的请求(认为是双重转义),需修改web.config开启双重转义支持:

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

验证说明

修改完成后,使用编码后的URLhttp://localhost:55917/api/abc/files/getFileDownloadLink/a%2Bb.pdf/9846.pdf发起请求,控制器的fileName参数会正确接收a+b.pdf,请求可正常进入控制器逻辑。

另外,若配置了允许未转义字符,直接传递未编码的+号(如http://localhost:55917/api/abc/files/getFileDownloadLink/a+b.pdf/9846.pdf)也能正常工作,但为符合URL规范,建议优先使用%2B编码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 20:58:17