2016-07-27 2 views
10

Я работаю над веб-приложением asp.net mvc. Теперь у меня есть значение для операционной системы, которая соответствует: -UriBuilder не может кодировать зарегистрированный знак UriBuilder

enter image description here

и я использую следующий код для создания URL, содержащий вышеуказанное значение следующим образом: -

var query = HttpUtility.ParseQueryString(string.Empty); 
query["osName"] = OperatingSystem; 


var url = new UriBuilder(apiurl); 
url.Query = query.ToString(); 
string xml = client.DownloadString(url.ToString()); 

но генерироваться URL будет содержать следующее значение для операционной системы: -

osName=Microsoft%u00ae+Windows+Server%u00ae+2008+Standard 

так UriBuilder будет кодировать зарегистрированный знак, %u00ae+, что неправильно, когда я пытаюсь декодировать %u00ae+ с использованием онлайн-сайта, такого как http://meyerweb.com/eric/tools/dencoder/, он не будет декодировать %u00ae+ как знак регистрации ??? так может ли кто-нибудь принять участие в этом, пожалуйста, как я могу отправить зарегистрированный знак внутри моего URL-адреса? это проблема в UrilBuilder?

Благодаря

EDIT Это четко моей проблема .. теперь я передать имя актива valueas £ ££££££ теперь запросу [ «assetName»] получите правильное значение .. но внутри запроса значение будет закодировано неправильно (не будет закодировано с использованием UTF8) !!!

enter image description here

ответ

4

Попробуйте это:

url.Query = Uri.EscapeUriString(HttpUtility.UrlDecode(query.ToString())); 

Как уже упоминалось здесь HttpUtility.ParseQueryString() always encodes special characters to unicode

+0

но может вы советуете, в чем проблема в моем случае? –

+2

Чтобы создать правильный URL (стандарт RFC3986), вы должны использовать [Uri.EscapeDataString] (https://msdn.microsoft.com/en-us/library/system.uri.escapedatastring.aspx), в противном случае специальные символы в Юникоде будут закодированный по умолчанию, как в вашем вопросе. –

+0

Но если я заменил "url.Query = query.ToString();" с «Uri.EscapeUriString (HttpUtility.UrlDecode (query.ToString())); я буду сталкиваться с любыми проблемами? ... теперь кажется, что используется «Uri.EscapeUriString (HttpUtility.UrlDecode (query.ToString())); исправит мою проблему для «зарегистрированного знака», но приведет к сбою других символов ... –

0

Используйте Uri.EscapeDataString(), чтобы избежать данных (содержащие специальные символы), прежде чем добавить в строку запроса

+0

,,, Так вы можете посоветовать, как я могу использовать этот метод внутри моего кода ??? вы хотите заменить Uri.EscapeUriString (HttpUtility.UrlDecode (query.ToString())); с Uri.EscapeDataString (HttpUtility.UrlDecode (query.ToString())); –

+0

query ["osName"] = OperatingSystem; var url = new UriBuilder (apiurl); url.Query = Uri.EscapeDataString (query.ToString()); – Prado

+0

Вам не нужно использовать HttpUtility.UrlDecode() – Prado

Смежные вопросы