【发布时间】:2011-10-25 10:34:34
【问题描述】:
首先,简要介绍一下背景... 作为与第三方供应商集成的一部分,我有一个 C# .Net Web 应用程序,它接收一个 URL,其中包含查询字符串中的一堆信息。该 URL 使用 MD5 哈希和共享密钥进行签名。基本上,我拉入查询字符串,删除它们的哈希,对剩余的查询字符串执行我自己的哈希,并确保我的与提供的匹配。
我正在通过以下方式检索 Uri...
Uri uriFromVendor = new Uri(Request.Url.ToString());
string queryFromVendor = uriFromVendor.Query.Substring(1); //Substring to remove question mark
我的问题源于包含特殊字符(如变音符号 (ü))的查询字符串。供应商正在根据 RFC 2396 表示形式(%FC)计算其哈希值。我的 C# .Net 应用程序正在根据 RFC 3986 表示形式(%C3%BC)计算它的哈希值。不用说,我们的哈希值不匹配,我抛出了我的错误。
奇怪的是,documentation for the Uri class in .Net 表示它应该遵循 RFC 2396,除非另有设置为 RFC 3986,但我的web.config 文件中没有他们说此行为所需的条目。
如何强制 Uri 构造函数使用 RFC 2396 约定?
如果做不到这一点,是否有一种简单的方法可以将 RFC 3986 八位字节对转换为 RFC 2396 八位字节?
【问题讨论】:
-
与你的问题无关,但你为什么要在这里创建一个新的 Uri?你可以做
string queryFromVendor = Request.Url.Query.Substring(1); -
您使用的是哪个版本的 .NET?
-
我使用的是 .Net 4.0。另外,奇怪的是,当我尝试使用
Request.Url.Query时,变音符号以%ufffd的形式出现,这是 � 字符。
标签: asp.net uri url-encoding rfc3986 rfc2396