【问题标题】:Api is giving 404 when added + as part of URL (%2B)添加 + 作为 URL (%2B) 的一部分时,Api 给出 404
【发布时间】:2026-02-06 02:25:01
【问题描述】:

我正在使用 asp.net core 3.1 并从 URL 接收值。它工作正常,但是当我添加“+”符号作为 URL 的一部分时,它会给出 404。 示例:localhost:9000/api/get/%2B12/values

【问题讨论】:

    标签: asp.net api asp.net-core


    【解决方案1】:

    + 是一个特殊字符。理想情况下应该是 URL 编码为%2B
    事实证明它并不是真正需要的(如下面的截图所示),但我仍然推荐它。 (见:URL encoding the space character: + or %20?

    这是一个工作示例控制器:

    [ApiController]
    public class ExpController : Controller
    {
        [Route("/api/exp/{arg}/values")]
        public IActionResult Test(int arg) =>
            Ok($"The arg is: {arg}");
    }
    

    注意路由参数是int。对于更复杂的值(不仅仅是 12、+12、-12;例如:12+12),路由需要改为字符串。

    【讨论】:

    • localhost:9000/api/get/%2B12/values
    • @Faisal 我已经添加了示例代码,试一试。
    • 我试过了,但只有 + (%2B) 不起作用。%2F 工作正常。有什么想法吗?
    【解决方案2】:

    IIS7以上版本默认会拒绝请求包含'+'等符号的URL。需要进行以下修改。您需要在 web.config 中添加以下节点:

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

    但是现在 .net core 项目没有 web.config 来配置 IIS 选项。您需要前往该地点:

    vs项目位置/.vs/config/applicationhost.config添加上面的节点。

    注意.vs文件夹是隐藏文件夹,需要设置为可见。

    【讨论】: