ASP.NET 4 URL限制:为什么URL不能包含任何%3f字符

时间:2010-05-14 00:30:58

标签: url asp.net-4.0

http://site.com/page%3fcharacter

此网址将返回以下错误:

Illegal characters in path.

我已经将它放在web.config中了:

<system.web>
<httpRuntime requestValidationMode="2.0" requestPathInvalidCharacters="" />
<pages validateRequest="false"> 
...

如何解决此错误?

3 个答案:

答案 0 :(得分:26)

如果您想通过请求,则需要添加requestPathInvalidCharacters并将其设置为空字符串:

<system.web>
    <httpRuntime requestPathInvalidCharacters="" />
</system.web>

修改你应该保留原来的问题,因为现在我的回答没有意义。

但在回答你的第二个问题时,那是因为%3f对应'?'在Windows上的文件名中不允许这样做。您可以将relaxedUrlToFileSystemMapping属性设置为true以更改此行为:

<system.web>
    <httpRuntime requestPathInvalidCharacters=""
                 relaxedUrlToFileSystemMapping="true" />
</system.web>

您可能希望查看HttpRuntimeSection课程中的所有属性,看看是否还有其他可能适用的属性。

您还可以实现RequestValidator的子类并设置您的web.config以使用您的子类(可能会允许所有URL通过?)。就个人而言,我不会打扰,只是让内置类处理它。普通用户不太可能在路径中的每个意外键入“%3f”,为什么要为恶意用户改进用例而烦恼呢?

顺便说一句,这实际上是ASP.NET 4中的一项新功能,这就是为什么Stack Overflow不会发出错误:它在.NET 3.5上运行。

答案 1 :(得分:14)

这是Hanselman的一篇很好的文章,解释了与你的问题相关的所有角落和缝隙:

Experiments in Wackiness: Allowing percents, angle-brackets, and other naughty things in the ASP.NET/IIS Request URL

答案 2 :(得分:1)

可能因为这看起来很像一个格式错误的网址。

&安培;用作查询字符串参数的分隔符,例如site.com/page?some=20&another=15