Во-первых, немного предыстории ... В рамках интеграции со сторонним поставщиком у меня есть веб-приложение C # .Net, которое получает URL-адрес с кучей информации в строке запроса. Этот URL-адрес подписан хешем MD5 и общим секретным ключом. По сути, я втягиваю строку запроса, удаляю их хеш, выполняю свой собственный хеш для оставшейся строки запроса и проверяю, совпадает ли мой с той, которая была предоставлена.
Я получаю Ури следующим образом ...
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?
string queryFromVendor = Request.Url.Query.Substring(1);- person magnattic   schedule 12.08.2011Request.Url.Query, умлаут проходил как%ufffd, что является символом �. - person Colin   schedule 12.08.2011