gpt4 book ai didi

asp.net - ASP.NET 路由参数中的管道字符导致 404

转载 作者:行者123 更新时间:2023-12-01 03:10:01 24 4
gpt4 key购买 nike

我们有一个带有以下路由的 ASP.NET Web API 方法:

[System.Web.Http.Route( "api/MergeFields/{id}" )]
public virtual string Get( string id )
{
...
}

在我们的大多数服务器上,如果 url 中的 {id} 参数包含管道字符,它仍然会匹配路由: http://www.example.com/api/MergeFields/Global|Test .但是,我们有一台 IIS 服务器,它返回 404 错误。

编码管道字符没有帮助: http://www.example.com/api/MergeFields/GlobalAttribute%7CTest ,它仍然返回 404。

在同一台服务器上,{id}​​ 参数中的任何其他字符都可以正常工作。例如 http://www.example.com/api/MergeFields/GlobalAttribute_Test作品。

我在 web.config 中搜索了可能影响 IIS 或 ASP.NET 如何解释管道字符的任何内容,但没有找到任何内容。同样,只有一台服务器出现此问题。在我们所有其他安装中,管道字符工作正常并匹配该路线。

最佳答案

我无法发表评论,但我试一试作为解决方案。
如果它不起作用,请告诉我。

检查 HttpRuntimeSection.RelaxedUrlToFileSystemMapping 属性,这可能是问题所在。

在您的 web.config 下,您可能应该像这样设置它(.NET 4.0):

<system.web>
<httpRuntime requestValidationMode="2.0" relaxedUrlToFileSystemMapping="true"/>
</system.web>

我不知道您的环境,但我假设您使用的是 4.0.0。

编辑2:
另请阅读请求过滤(可能阻止请求的服务)。很好的信息和可能的其他几个动词,您可以用来将管道字符“列入白名单”: https://docs.microsoft.com/en-us/iis/configuration/system.webserver/security/requestfiltering/

编辑:
仅供引用,管道被定义为“不安全字符”。我建议阅读有关选择分隔符的文档: https://sites.google.com/site/getsnippet/javascript/ut/url-encoded-characters/-please-stop-using-unsafe-characters-in-urls

关于asp.net - ASP.NET 路由参数中的管道字符导致 404,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52968137/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com