まず、いくつかの簡単な背景... サード パーティ ベンダーとの統合の一環として、クエリ文字列に一連の情報を含む URL を受け取る C# .Net Web アプリケーションを使用しています。その 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 3986 に設定されていない限り、RFC 2396 に従う必要があると書かれていますが、私のweb.config
ファイルには、この動作に必要であるというエントリがありません。
Uri コンストラクターが RFC 2396 規則を使用するように強制するにはどうすればよいですか?
それに失敗した場合、RFC 3986 オクテット ペアを RFC 2396 オクテットに変換する簡単な方法はありますか?