210 c# asp.net url routing webforms
我收到了相当自我解释的错误:
从客户端(*)检测到潜在危险的Request.Path值.
问题是由*
请求URL引起的:
https://stackoverflow.com/Search/test*/0/1/10/1
Run Code Online (Sandbox Code Playgroud)
此网址用于填充搜索页面,其中"test*"是搜索字词,其余网址与各种其他过滤条件相关.
是否有一种简单的方法可以在URL中允许这些特殊字符?我试过修改web.config
,但无济于事.
我应该手动编码/解码特殊字符吗?或者有这样做的最佳实践,我想避免使用查询字符串. - 但它可能是一种选择.
应用程序本身是一个c# asp.net
webforms应用程序,它使用路由生成上面的漂亮URL.
Dav*_*som 306
如果您使用的是.NET 4.0,则应该可以通过web.config允许这些URL
<system.web>
<httpRuntime
requestPathInvalidCharacters="<,>,%,&,:,\,?" />
</system.web>
Run Code Online (Sandbox Code Playgroud)
注意,我刚刚删除了星号(*),原始的默认字符串是:
<httpRuntime
requestPathInvalidCharacters="<,>,*,%,&,:,\,?" />
Run Code Online (Sandbox Code Playgroud)
有关详细信息,请参阅此问题.
Guf*_*ffa 95
*
URL的路径中不允许使用该字符,但在查询字符串中使用该字符没有问题:
http://localhost:3286/Search/?q=test*
Run Code Online (Sandbox Code Playgroud)
这不是编码问题,*
角色在URL中没有特殊含义,因此无论您是否对其进行URL编码都无关紧要.您需要使用不同的方案对其进行编码,然后对其进行解码.
例如,使用任意字符作为转义字符:
query = query.Replace("x", "xxx").Replace("y", "xxy").Replace("*", "xyy");
Run Code Online (Sandbox Code Playgroud)
并解码:
query = query.Replace("xyy", "*").Replace("xxy", "y").Replace("xxx", "x");
Run Code Online (Sandbox Code Playgroud)
对我来说,我正在使用Web api 2.0在.net 4.5.2上工作,我遇到了相同的错误,我只是通过在requestPathInvalidCharacters中添加requestPathInvalidCharacters =“”来设置它,您必须设置不允许的字符,否则您必须删除那些造成这个问题。
<system.web>
<httpRuntime targetFramework="4.5.2" requestPathInvalidCharacters="" />
<pages >
<namespaces>
....
</namespaces>
</pages>
</system.web>
Run Code Online (Sandbox Code Playgroud)
**请注意,这不是一个好习惯,可能是带有此参数的帖子,因为对象的属性更好,或者尝试对特殊字符进行编码。-在搜索设计rest api的最佳实践之后,我发现在搜索,排序和分页中,我们必须像这样处理查询参数
/companies?search=Digital%26Mckinsey
Run Code Online (Sandbox Code Playgroud)
这解决了当我们对&进行编码并通过%26将其重新放置在url上时的问题,在服务器上,我们收到了正确的参数Digital&Mckinsey
此链接可能有助于设计其余Web API的最佳实践 https://hackernoon.com/restful-api-designing-guidelines-the-best-practices-60e1d954e7c9