Webclient не любит косую черту, закодированную в URL. Как заставить его работать?

#c# #asp.net #.net #webclient #.net-2.0

Вопрос:

Я пытаюсь передать URL-адрес API с помощью веб-клиента .net 2.0 (не удалось обновить). Вызов webclient работает только в том случае, если в закодированном значении нет косых черт. Есть идеи, почему он терпит неудачу и как заставить его работать?

 using System.Net; using System.Text; using System.Web;  namespace ConsoleAppWebClient {  class Program  {  static void Main(string[] args)  {  using (var client = new WebClient())  {  client.Encoding = Encoding.UTF8;  client.Headers[HttpRequestHeader.Accept] = "application/xml";  var requestUrl = HttpUtility.UrlEncode("https://www.somewebsite.com");  var stringResult = client.DownloadString("https://localhost:12345/api/getstuff/"   requestUrl);  }  }  } }  

Вышесказанное не работает, но нижеприведенное работает просто отлично

 using System; using System.Collections.Generic; using System.IO; using System.Net; using System.Text; using System.Xml.Serialization; using System.Web;  namespace ConsoleAppWebClient {  class Program  {  static void Main(string[] args)  {  using (var client = new WebClient())  {  client.Encoding = Encoding.UTF8;  client.Headers[HttpRequestHeader.Accept] = "application/xml";  var requestUrl = HttpUtility.UrlEncode("https:www.somewebsite.com");  var stringResult = client.DownloadString("https://localhost:12345/api/getstuff/"   requestUrl);  }  }  } }  

Ответ №1:

Похоже requestUrl , что он должен быть параметром запроса, но вы добавляете его в путь URL-адреса.

В результате получается

https://localhost:12345/api/getstuff/https://www.somewebsite.com

«%»- это небезопасный символ, который может привести к непредсказуемым результатам.

Вместо этого попробуйте сделать его параметром строки запроса:

 var requestUrl = HttpUtility.UrlEncode("https:www.somewebsite.com"); var stringResult = client.DownloadString(  "https://localhost:12345/api/getstuff/?requestUrl="   requestUrl);  

Теперь, когда параметр, закодированный в URL, находится в строке запроса вместо пути, все должно быть в порядке.