我收到了一个不言自明的错误:

一个潜在的危险请求。日志含义从客户端检测到路径值(*)。

问题是由于请求URL中的*:

https://stackoverflow.com/Search/test*/0/1/10/1

该url用于填充搜索页面,其中“test*”是搜索词,url的其余部分与各种其他过滤器相关。

是否有一种简单的方法允许这些特殊字符出现在URL中?我试过修改网页。配置,毫无用处。

我应该手动编码/解码特殊字符吗? 或者是否有这样做的最佳实践,我希望避免使用查询字符串。-但这可能是一种选择。

应用程序本身是一个c# asp.net webforms应用程序,它使用路由生成上面漂亮的URL。


当前回答

尝试将web项目的服务器属性设置为本地IIS,如果它是IIS Express。确认项目url是否正确,并创建虚拟目录。

其他回答

如果你使用的是。net 4.0,你应该能够通过web.config允许这些url

<system.web>
    <httpRuntime 
            requestPathInvalidCharacters="&lt;,&gt;,%,&amp;,:,\,?" />
</system.web>

注意,我刚刚删除了星号(*),原始的默认字符串是:

<httpRuntime 
          requestPathInvalidCharacters="&lt;,&gt;,*,%,&amp;,:,\,?" />

请参阅这个问题了解更多细节。

在处理统一资源定位符(URL)时有一定的语法标准,在这种特殊情况下,我们处理的是保留字符。

在RFC 3986之前,保留字符可以(也可以不)通过通用语法、每个特定于方案的语法或URI解引用算法的特定于实现的语法定义为分隔符;星号(*)是保留字符。

最好的做法是在url中使用无保留字符,或者您可以尝试对其进行编码。

继续挖掘:

HTML URL编码参考(w3schools) 何时编码或解码(RFC 3986)

对我来说,当输入url时,一个用户不小心用了/而不是?命令,启动查询参数

例如:

url.com/endpoint/parameter = SomeValue&otherparameter = +价值

应该是:

url.com/endpoint ?参数= SomeValue&otherparameter =另一个+值

这个异常发生在我的应用程序中,相当容易引起误解。

当我使用ajax方法调用.aspx页面Web方法时,传递了一个JSON数组对象。Web Page方法签名包含一个强类型的. net对象OrderDetails数组。 Actual_Qty属性被定义为int, JSON对象Actual_Qty属性包含“4”(额外的空格字符)。 在移除额外的空间之后,转换就可以实现了,ajax调用成功地到达了Web Page方法。

您应该对路由值进行编码,然后(如果需要的话)在搜索之前解码该值。