当我访问http://localhost:17357/u/a%2fa/m/ssd-10和HttpContext.Current.Request.Url in Application_BeginRequest时,我看到了http://localhost:17357/u/a/a/m/ssd-10,是吗?我不应该去找http://localhost:17357/u/a%2fa/m/ssd-10吗?我认为转义urls的意义是?,&,和其他特殊符号不能与它们在urls中的特殊含义混淆。也许我需要调整配置?
我创建了4个用户名
a?@!&ee
a?@!/&ee
as d
クイン与链接为
<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>最后两项工作,但前两项我得到了例外
A first chance exception of type 'System.ArgumentException' occurred in mscorlib.dll
Additional information: Illegal characters in path.然后
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.我的页面上写着Bad Request。我如何允许这些用户名工作。如果这是不可能的,我怎么能写一个解决办法?
发布于 2010-02-04 02:44:21
你得再逃一次。使用%252f而不是%2f。为了澄清,当服务器接收到URL时,URL是未编码的。URL编码允许您传入服务器作为字符处理的/,而不是保留字符通常会触发的特殊函数。有关更多信息,请参见维基百科页面。
关于a?@!&ee用户名的错误,几乎可以肯定,ASP.NET遇到了一个特殊字符(甚至正确编码)的问题,这些字符不在查询字符串中(即,在?部分之后)。乔舒亚弗拉纳根谈到它在博客上发表,并认为%,&,*和:是有问题的字符。
他指出,Dirk.Net博客文章提供了几个修复程序。首先,可以使用编辑注册表来允许受限字符(将DWORD键AllowRestrictedChars添加到HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\HTTP\Parameters并将其布尔值设置为true)。或者,您可以确保您拥有.NET Framework1.1 SP1并编辑注册表,将ASP.NET VErification兼容性设置为true (DWORD HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\ASP.NET VerificationCompatibility = 1)。第三,您可以尝试在ASPX页面上将ValidateRequest设置为false。最后,正如约书亚决定要做的那样,您可以使用查询字符串传递信息,即在?之后传递最初预期的ASP.Net (pre )。
发布于 2010-03-01 12:00:19
我自己写的解决方案。在获得GET请求时,有一个带有/但不考虑/的用户名是很好的。
https://stackoverflow.com/questions/2197014
复制相似问题