.Net Uri Encoding RFC 2396 vs RFC 3986

Во-первых, небольшая справка ... В рамках интеграции со сторонним поставщиком у меня есть веб-приложение 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?

8
задан John Saunders 12 August 2011 в 01:16
поделиться