【发布时间】: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
我正在使用 asp.net core 3.1 并从 URL 接收值。它工作正常,但是当我添加“+”符号作为 URL 的一部分时,它会给出 404。 示例:localhost:9000/api/get/%2B12/values
【问题讨论】:
标签: asp.net api asp.net-core
+ 是一个特殊字符。理想情况下应该是 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),路由需要改为字符串。
【讨论】:
IIS7以上版本默认会拒绝请求包含'+'等符号的URL。需要进行以下修改。您需要在 web.config 中添加以下节点:
<system.webServer>
<security>
<requestFiltering allowDoubleEscaping="true"/>
</security>
</system.webServer>
但是现在 .net core 项目没有 web.config 来配置 IIS 选项。您需要前往该地点:
vs项目位置/.vs/config/applicationhost.config添加上面的节点。
注意.vs文件夹是隐藏文件夹,需要设置为可见。
【讨论】: