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

此 URL 将返回以下错误:

Illegal characters in path.

我已经把它放在 web.config 中:

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

我该如何解决这个错误?

4

3 回答 3

29

如果要允许请求通过,则需要添加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 上运行。

于 2010-05-14T00:37:18.487 回答
14

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

古怪的实验:在 ASP.NET/IIS 请求 URL 中允许百分比、尖括号和其他顽皮的东西

于 2010-07-09T12:40:03.580 回答
2

可能是因为这看起来很像格式错误的 url。

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

于 2010-05-14T00:33:36.503 回答