首先,一些快速背景...作为与第三方供应商集成的一部分,我有一个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
Run Code Online (Sandbox Code Playgroud)
我的问题源于查询字符串,其中包含特殊字符,如变音符号(ü).供应商正在根据RFC 2396表示计算其哈希值%FC.我的C#.Net应用程序正在根据RFC 3986表示计算它的哈希值%C3%BC.不用说,我们的哈希不匹配,我抛出我的错误.
奇怪的是,.Net中Uri类的文档说它应该遵循RFC 2396,除非另有设置为RFC 3986,但我没有在我的web.config文件中有他们说这个行为需要的条目.
如何强制Uri构造函数使用RFC 2396约定?
如果失败了,有没有一种简单的方法将RFC 3986八位字节对转换为RFC 2396八位字节?