如何在URLEncoded或ASP.NET中具有百分比字符时获取查询字符串
-
08-07-2019 - |
题
当查询字符串是UrlEncoded或在ASP.NET中具有百分比字符时,如何从Request对象获取实际的查询字符串?
基本上,如果我有这样的网址: Default.aspx?p =%b4
,如何获取填充了“%b4”的字符串?
Request.QueryString [" p"]
返回不可打印的字符。
Request.RawUrl
返回Default.aspx?p =%ufffd"
Request.Url.AbsoluteUri
返回Default.aspx?p =%EF%BF%BD
我怎样才能得到“%b4”回来?
解决方案
我进一步挖掘了这个,并且相信我知道是什么导致了这个问题:HTTP客户端正在向服务器提交一个URL,该URL没有经过正确的URL编码。具体来说,URL中存在无效字符。
要重新登录,请将网址末尾的以下内容粘贴到IE8中: default.aspx?p ='
如果你检查线路上的字节数(例如使用 Fiddler ),你会看到实际的十六进制B4字符正在URL中从客户端发送到服务器。这是URL中的非法字符,因为URL仅限于0x80下的字符代码(任何大于0x80的字符代码必须进行百分比转义)。
所以你的客户端传入一个无效字符,你的服务器正确地用%EF%BF%BD替换伪造的字符,这是 Unicode替换字符(U + 0FFD),当遇到没有等效字符的字符时会发生这种情况在本地编码中。
AFAIK,这是IE中的一个错误。如果您在Firefox中键入相同的URL,Firefox将正确编码URL(%b4而不是')。请注意,同样是AFAIK,问题只发生在手动将无效字符粘贴到IE的地址栏中时 - 如果链接中存在相同的字符,IE似乎正确编码URL(至少在我测试的情况下)。
因此,您应该弄清楚谁向您发送此虚假网址,并告诉他们开始正确编码其网址!
其他提示
当您执行Request.Querystring [" key"]时,Asp.net会自动对URL进行解码。你只需要再次编码。
HttpUtility.UrlEncode(Request.QueryString["p"])
HttpContext.Current.Request.ServerVariables["QUERY_STRING"]
将返回RAW查询字符串
我遇到了同样的问题。我只是通过添加javascript“escape('text%text')”来解决它。同时构建查询串!