http://site.com/page%3fcharacter
此 URL 将返回以下错误:
Illegal characters in path.
我已经把它放在 web.config 中:
<system.web>
<httpRuntime requestValidationMode="2.0" requestPathInvalidCharacters="" />
<pages validateRequest="false">
...
我该如何解决这个错误?
http://site.com/page%3fcharacter
此 URL 将返回以下错误:
Illegal characters in path.
我已经把它放在 web.config 中:
<system.web>
<httpRuntime requestValidationMode="2.0" requestPathInvalidCharacters="" />
<pages validateRequest="false">
...
我该如何解决这个错误?
如果要允许请求通过,则需要添加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 上运行。
这是 Hanselman 的一篇不错的文章,解释了与您的问题相关的所有角落和缝隙:
可能是因为这看起来很像格式错误的 url。
& 用作查询字符串参数的分隔符,即 site.com/page?some=20&another=15