#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, находится в строке запроса вместо пути, все должно быть в порядке.