我收到了一个不言自明的错误:
一个潜在的危险请求。日志含义从客户端检测到路径值(*)。
问题是由于请求URL中的*:
https://stackoverflow.com/Search/test*/0/1/10/1
该url用于填充搜索页面,其中“test*”是搜索词,url的其余部分与各种其他过滤器相关。
是否有一种简单的方法允许这些特殊字符出现在URL中?我试过修改网页。配置,毫无用处。
我应该手动编码/解码特殊字符吗?
或者是否有这样做的最佳实践,我希望避免使用查询字符串。-但这可能是一种选择。
应用程序本身是一个c# asp.net webforms应用程序,它使用路由生成上面漂亮的URL。
*字符不允许出现在URL的路径中,但是在查询字符串中使用它是没有问题的:
http://localhost:3286/Search/?q=test*
这不是编码问题,*字符在URL中没有特殊含义,所以URL编码与否无关紧要。您需要使用不同的方案对其进行编码,然后对其进行解码。
例如,使用任意字符作为转义字符:
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="<,>,%,&,:,\,?" />
</system.web>
注意,我刚刚删除了星号(*),原始的默认字符串是:
<httpRuntime
requestPathInvalidCharacters="<,>,*,%,&,:,\,?" />
请参阅这个问题了解更多细节。
*字符不允许出现在URL的路径中,但是在查询字符串中使用它是没有问题的:
http://localhost:3286/Search/?q=test*
这不是编码问题,*字符在URL中没有特殊含义,所以URL编码与否无关紧要。您需要使用不同的方案对其进行编码,然后对其进行解码。
例如,使用任意字符作为转义字符:
query = query.Replace("x", "xxx").Replace("y", "xxy").Replace("*", "xyy");
和解码:
query = query.Replace("xyy", "*").Replace("xxy", "y").Replace("xxx", "x");