Во-первых, немного предыстории ... В рамках интеграции со сторонним поставщиком у меня есть веб-приложение на C # .Net, которое получает 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
.Излишне говорить, что наши хэши не совпадают, и я выкидываю свои ошибки.
Странно, но документация для класса Uri в .Net говорит, что он должен следовать RFC 2396, если не установленов RFC 3986, но у меня нет записи в моем файле web.config
, который, по их словам, необходим для этого поведения.
Как я могу заставить конструктор Uri использовать соглашение RFC 2396?
Если это не так, есть ли простой способ преобразовать пары октетов RFC 3986 в октеты RFC 2396?