2016-01-12 4 views
0

Iam пытается кодировать URL-адрес, так что HttpWebRequest отлично подходит для символов, таких как &.HttpUtility.UrlEncode неожиданный вывод

Так Google выводил меня к этому:

url = HttpUtility.UrlEncode(url); 

Но это делает весь URL-адрес непригодным. Iam получение Status-Error: Недействительная операция с веб-сервера.

Я получил этот адрес перед IAM использованием кодирования:

http://jira-test.myServer.de/rest/api/2/search?jql=labels = "F&E" 

После кодирования я получил это:

http%3a%2f%2fjira-test.brillux.de%2frest%2fapi%2f2%2fsearch%3fjql%3dlabels+%3d+%22F%26E%22 

Что IAM делать неправильно? По-моему, он не должен заменять // после http и так далее ... Или есть другой способ справиться с этой проблемой?

Информация:

Uri.EscapeDataString(); 

дает мне тот же результат.

ответ

2

Вы должны кодировать только значения вашей строки запроса, а не весь URI:

var uri = "http://jira-test.myServer.de/rest/api/2/search?jql=" + 
      HttpUtility.UrlEncode("labels = \"F&E\""); 

// Result: http://jira-test.myServer.de/rest/api/2/search?jql=labels+%3d+%22F%26E%22 

Правильный способ построить это:

// Construct query string using HttpValueCollection, which handles escaping: 
var queryString = HttpUtility.ParseQueryString(string.Empty); 
queryString.Add("jql", "labels = \"F&E\""); 

// Combine base URI with query string through UriBuilder: 
var uriBuilder = new UriBuilder("http://jira-test.myServer.de/rest/api/2/search"); 
uriBuilder.Query = queryString.ToString(); 

// Get string representation: 
string uri = uriBuilder.ToString(); 

// Result: http://jira-test.myserver.de:80/rest/api/2/search?jql=labels+%3d+%22F%26E%22 
Смежные вопросы