当我访问http://localhost:17357/u/a%2fa/m/ssd-10
并查看HttpContext.Current.Request.Url
Application_BeginRequest时,我看到了http://localhost:17357/u/a/a/m/ssd-10
吗?我不应该得到http://localhost:17357/u/a%2fa/m/ssd-10
?我认为逃避网址的重点是什么?,&,和其他特殊符号不要与网址中的特殊含义相混淆.也许我需要调整配置?
我创建了4个用户名,有
a?@!&ee
a?@!/&ee
as d
???
Run Code Online (Sandbox Code Playgroud)
链接为
<a href="/u/a%3f%40%21%26ee">a?@!&ee</a><br>
<a href="/u/a%3f%40%21%2f%26ee">a?@!/&ee</a><br>
<a href="/u/as%20d">as d</a><br>
<a href="/u/%ef%bd%b8%ef%bd%b2%ef%be%9d">???</a>
Run Code Online (Sandbox Code Playgroud)
最后两个工作,但前两个我得到了exceptio
A first chance exception of type 'System.ArgumentException' occurred in mscorlib.dll
Additional information: Illegal characters in path.
Run Code Online (Sandbox Code Playgroud)
然后
A first chance exception of type 'System.Web.HttpException' occurred in System.Web.dll
Additional information: '/u/a?@!&ee' is not a valid virtual path.
Run Code Online (Sandbox Code Playgroud)
我的页面说Bad Request
.我如何允许这些用户名工作.如果不可能我怎么写一个解决方法?
你需要再次逃脱它.用%252f
而不是%2f
.为了澄清,当服务器收到URL时,URL是未编码的.URL编码允许您传入/
服务器处理的字符而不是保留字符通常会触发的特殊功能.有关详细信息,请参阅Wikipedia页面.
关于你的a?@!&ee
用户名错误,你几乎可以肯定你遇到的问题是ASP.NET有特殊字符(甚至是urlencoded),它们不在查询字符串中(即?
在URL 的一部分之后) .约书亚那根谈论它在一篇博客文章,并确定%
,&
,*
,并:
为存在问题的字符.
他指向一个Dirk.Net博客文章,提供了一些修复.首先,你可以编辑注册表,以允许受限制的字符(添加DWORD键AllowRestrictedChars
,以HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\HTTP\Parameters
和其布尔值设置为true).或者,您可以确保拥有.NET framework 1.1 SP1并编辑注册表以将ASP.NET VErification Compatibility设置为true(DWORD HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\ASP.NET VerificationCompatibility = 1
).第三,您可以尝试ValidateRequest
在ASPX页面上设置为false.最后,正如Joshua决定做的那样,你可以使用查询字符串传递信息,即在?
ASP.Net最初(预MVC)之后.
归档时间: |
|
查看次数: |
1858 次 |
最近记录: |