我收到了相当自我解释的错误:
从客户端(*)检测到潜在危险的Request.Path值。
问题是由于请求网址中的*
:
https://stackoverflow.com/Search/test*/0/1/10/1
此网址用于填充搜索页面,其中“test *”是搜索字词,其余网址与其他各种过滤器相关。
是否有一种简单的方法可以在URL中允许这些特殊字符?我尝试修改web.config
,但没有用。
我应该手动编码/解码特殊字符吗? 或者有这样做的最佳实践,我想避免使用查询字符串。 - 但它可能是一种选择。
应用程序本身是一个c# asp.net
网络表单应用程序,它使用路由生成上面的网址。
答案 0 :(得分:292)
如果您使用的是.NET 4.0,则应该可以通过web.config
来允许这些URL<system.web>
<httpRuntime
requestPathInvalidCharacters="<,>,%,&,:,\,?" />
</system.web>
注意,我刚刚删除了星号(*),原始默认字符串是:
<httpRuntime
requestPathInvalidCharacters="<,>,*,%,&,:,\,?" />
有关详细信息,请参阅this question。
答案 1 :(得分:91)
在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");
答案 2 :(得分:5)
您应该对路由值进行编码,然后(如果需要)在搜索之前解码该值。
答案 3 :(得分:4)
对我来说,我正在使用web api 2.0开发.net 4.5.2, 我有同样的错误,我只是通过添加requestPathInvalidCharacters =“”来设置它 在requestPathInvalidCharacters中你必须设置不允许的字符,否则你必须删除导致此问题的字符。
<system.web>
<httpRuntime targetFramework="4.5.2" requestPathInvalidCharacters="" />
<pages >
<namespaces>
....
</namespaces>
</pages>
</system.web>
**请注意,这不是一个好习惯,可能是带有此参数的帖子,因为对象的属性更好或尝试编码特殊字符。 - 在搜索设计rest api的最佳实践后,我发现在搜索,排序和分页中,我们必须像这样处理查询参数
/companies?search=Digital%26Mckinsey
这解决了我们编码时的问题。并在%26上将其重新放在网址上 无论如何,在服务器上我们收到正确的参数Digital&amp; Mckinsey
此链接可能有助于设计rest web api的最佳实践 https://hackernoon.com/restful-api-designing-guidelines-the-best-practices-60e1d954e7c9
答案 4 :(得分:0)
此异常发生在我的申请中,并且具有误导性。
当我使用ajax方法调用调用.aspx页面Web方法时,抛出它,传递一个JSON数组对象。 Web页面方法签名包含一个强类型.NET对象的数组OrderDetails。 Actual_Qty属性定义为int,JSON对象Actual_Qty属性包含“4”(额外空格字符)。 删除额外空间后,转换成为可能,ajax调用成功访问了Web Page方法。
答案 5 :(得分:0)
在处理统一资源定位器(URL)时,有一定的syntax standards,在这种情况下,我们正在处理保留字符。
直到RFC 3986,保留字符可以(或可能不)通过通用语法,每种特定于方案的语法或URI的特定于实现的语法定义为分隔符。解除引用算法;星号(*)是保留字符。
最佳做法是在网址中使用Unreserved Characters,或者您可以尝试对其进行编码。
继续挖掘:
答案 6 :(得分:0)
如果它是IIS Express,请尝试将Web项目的服务器设置为本地IIS。确保项目URL是否正确并创建虚拟目录。
答案 7 :(得分:0)
对我来说,键入URL时,用户不小心使用了/而不是?启动查询参数
例如:
url.com/endpoint/parameter=SomeValue&otherparameter=另一个+值
应该是:
url.com/endpoint?parameter=SomeValue&otherparameter=另一个+值
答案 8 :(得分:0)
我在 Azure 数据工厂中遇到了类似的问题,带有 : 字符。
我通过将 : 替换为 %3A
解决了问题如图所示here。
例如,我替换了
date1=2020-01-25T00:00:00.000Z
与
date1=2020-01-25T00%3A00%3A00.000Z