首先,一些快速的背景知识...作为与第三方供应商集成的一部分,我有一个 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
. 不用说,我们的哈希值不匹配,我抛出了我的错误。
奇怪的是,.Net 中 Uri 类的文档说它应该遵循 RFC 2396,除非另外设置为 RFC 3986,但我的web.config
文件中没有他们说这种行为所需的条目。
如何强制 Uri 构造函数使用 RFC 2396 约定?
如果做不到这一点,是否有一种简单的方法可以将 RFC 3986 八位字节对转换为 RFC 2396 八位字节?