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

时间:2018-10-24 11:43:12

标签: asp.net iis routing web.api

我们有一个采用以下路由的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解释管道字符的方式的任何内容,但是却找不到任何内容。同样,只有一台服务器出现此问题。在我们所有其他安装中,管道字符都可以正常工作并与该路线匹配。

1 个答案:

答案 0 :(得分:2)

我无法发表评论,但可以尝试一下。
请让我知道它是否无效。

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

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

hello - 3

我不了解您的环境,但我假设您使用4.0。

Edit2:
另请阅读有关请求过滤(可能阻止请求的服务)的信息。很好的信息以及可能会用于将白名单字符“白名单”的其他几个动词: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