技术: .NET 2.0,Request.Url.ToString()

翟二喜

今天搞了还没彻底清的一直以来的问题,也许这并不是问题只是我一值还没搞清:

先看这么一个地址:
http://localhost/MyApp/viewpage.aspx?v_pmode=%D5%D0%C9%CC%D2%F8%D0%D0%D2%BB%CD%F8%CD%A8
v_pmode 的值是 gb2312 + 按字节hex 编码后的内容,原文是“招商银行一卡通”,这是从首信支付平台回调地址中抽取的一部分。

上面的地址,在 IIS Log 里会形成这样的一个记录:
GET /MyApp/viewpage.aspx v_pmode=%D5%D0%C9%CC%D2%F8%D0%D0%D2%BB%CD%F8%CD%A8
这与我输入的地址是相同的。

但是下面几个函数得到的结果是:
Request.Url.ToString() :http://localhost/MyApp/viewpage.aspx?v_pmode=??
Request.QueryString :v_pmode=%u62db%u5546%u94f6%u884c%u4e00%u7f51%u901a
Request.Url.Query :?v_pmode=%D5%D0%C9%CC%D2%F8%D0%D0%D2%BB%CD%F8%CD%A8
(Request.Url.ToString()中的两个??是代码集不匹配显示出来的两个方框)

试试直接写中文呢?将链接地址改为:
http://localhost/MyApp/viewpage.aspx?v_pmode=招商银行一卡通

结果如下:
IIS Log: GET /MyApp/viewpage.aspx v_pmode=招商银行一卡通
Request.Url.ToString() :http://localhost/MyApp/viewpage.aspx?v_pmode=招商银行一卡通
Request.QueryString :v_pmode=%u62db%u5546%u94f6%u884c%u4e00%u5361%u901a
Request.Url.Query :?v_pmode=%E6%8B%9B%E5%95%86%E9%93%B6%E8%A1%8C%E4%B8%80%E5%8D%A1%E9%80%9A

试试多语种呢?将链接地址改为:
http://localhost/MyApp/viewpage.aspx?v_pmode=没脾气???????
(后面的问号前一部分是阿拉伯文,后一部分是朝鲜文,在这个blog系统中显示不出来)

IIS Log: GET /MyApp/viewpage.aspx v_pmode=没脾气???????
Request.Url.ToString() :http://localhost/MyApp/viewpage.aspx?v_pmode=没脾气???????
Request.QueryString :v_pmode=%u6ca1%u813e%u6c14%3f%3f%3f%3f%3f%3f%3f
Request.Url.Query :?v_pmode=%E6%B2%A1%E8%84%BE%E6%B0%94???????
(记录中的问号是实实在在的问号;测试的客户端和服务器端是在一个系统上运行的,代码集安装的问题应该当然是相同的吧)

Request.Url.ToString()、Request.QueryString、Request.Url.Query 没有一个能在所有状态下真实的反映存在于客户端提交串的真实情况,哪怕是与IIS Log相同的记录都可以啊。这些内容是 IIS 没有提供给 ISAPI 程序,还是 .NET 跟本没有对这些内容原型返回?这不重要。重要的是如何找回客户端提交串。要不然怎么对客户端提交串进行签名验证呢?

目前没有更好的解决办法,困了,懒的写了。

上面提到的 IIS Log 是 IIS 自动保存的,ASCII(gb2312)  编码
另外三项的结果是从 streamWriter.WriteLine( ... ) 保存在文件中的内容得到,文件编码格式使用 UTF-8 或 Unicode 得到的显示结果都是一个样子。

(未完,仍需继续分析)

另外,Request.ContentEncoding 在上面的所有试验中,都是 gb2312。
可是我在客户端IE里设定的是“Always send URLs as UTF-8”啊,奇怪为什么还是以 gb2312 传送。是不是这 Always send 的 URLs 只是指的问号以前的东西?或者是说 Request.ContentEncoding 只说明服务器端的事,我一直误解了。

(未完,仍需继续分析)

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: