从客户端(*)检测到潜在危险的Request.Path值

我正在接受相当自我解释的错误:

客户端(*)检测到有潜在危险的Request.Path值。

问题是,我的url包含*:

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

此url用于填充search网页,其中“test *”是search字词,其余的url与各种其他过滤条件相关。

我的问题是,如果有一个简单的解决scheme,让我把这些特殊字符作为search条件?

我已经尝试在web.config中包含以下内容,但是如果显示错误消息,则不起作用。

我应该手动编码/解码的特殊字符?

有这样做的最佳做法吗? 我想尝试和避免使用查询string,但我想这是一个选项。

应用程序本身是ac#asp.net webforms应用程序,使用路由来产生上面的漂亮的URL。

在URL的path中不允许使用*字符,但在查询string中使用它没有问题:

 http://localhost:3286/Search/?q=test* 

这不是一个编码问题, *字符在URL中没有特殊的含义,所以不pipe你的URL是否被编码。 您需要使用不同的scheme对其进行编码,然后对其进行解码。

例如使用任意字符作为转义字符:

 query = query.Replace("x", "xxx").Replace("y", "xxy").Replace("*", "xyy"); 

并解码:

 query = query.Replace("xyy", "*").Replace("xxy", "y").Replace("xxx", "x"); 

如果你使用.NET 4.0,你应该可以通过web.config来允许这些URL

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

注意,我刚删除了星号(*),原来的默认string是:

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

看到这个问题的更多细节。

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

这个例外发生在我的申请中,相当具有误导性。

当我使用ajax方法调用一个.aspx页面的Web方法时,抛出了一个JSON数组对象。 Web Page方法签名包含一个强types的.NET对象OrderDetails的数组。 Actual_Qty属性被定义为int,而JSON对象Actual_Qty属性包含“4”(多余的空格字符)。 删除多余的空间后,转换成为可能,通过ajax调用成功地达到了Web Page方法。

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

直到RFC 3986 ,保留字符可能(或可能不)被通用语法,每种scheme特定的语法或URI的解引用algorithm的特定于实现的语法定义为分隔符; 星号(*)是保留字符。

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

继续挖掘:

  • 查询string参数的Java URL编码
  • HTMLurl编码参考(w3schools)
  • 何时编码或解码(RFC 3986)
  • 如何从给定的URL提取参数

尝试将Web项目的服务器configuration为本地IIS,如果它是IIS Express的话。 确保项目url是否正确并创build虚拟目录。