Разница между методами RestSharp AddParameter и AddQueryParameter с использованием HttpGET
Я использую RestSharp для вызова внешнего API.
Это работает:
var client = new RestClient(apiUrl);
var request = new RestRequest(myurl, Method.GET);
foreach (var param in parameters)
{
request.AddQueryParameter(param.Key, param.Value);
}
var response = client.Execute(request);
Это не означает:
var client = new RestClient(apiUrl);
var request = new RestRequest(myurl, Method.GET);
foreach (var param in parameters)
{
request.AddParameter(param.Key, param.Value);
}
var response = client.Execute(request);
В результате чего:
System.Exception: API-вызов MyWebAPIMethod GET: с кодом состояния 0 - невозможно подключиться к удаленному серверу
Какая разница между AddParameter
и AddQueryParameter
? Согласно документации, они должны работать одинаково при использовании HttpGET? По словам Фиддлера, они, похоже, тоже создают тот же URL.
Ответы
Ответ 1
Чтобы ответить на ваш вопрос
AddQueryParameter
добавляет параметр в строку запроса как ParameterType.QueryString
тогда как AddParameter(string, object)
добавляет параметр как ParameterType.GetOrPost
Более подробную информацию о каждом типе параметров см. В следующих разделах:
GetOrPost
: https://github.com/restsharp/RestSharp/wiki/ParameterTypes-for-RestRequest#getorpost
QueryString
: https://github.com/restsharp/RestSharp/wiki/ParameterTypes-for-RestRequest#querystring
Чтобы решить вашу проблему
Кажется, он не связан с типом параметра, потому что созданное исключение указывает на то, что вы даже не подключаетесь к удаленному серверу.
убедитесь, что вы apiUrl
один и тот же apiUrl
/myUrl
в обоих случаях.
Ответ 2
Отвечать OP и всем, кто может столкнуться с этой концепцией. Мне потребовалось некоторое время, чтобы обойти эту концепцию. Вероятно, вам нужно визуализировать стандарт RESTful о том, как создать сообщение запроса GET в URL-адресе для создания сообщения POST-запроса.
Вы заметите, что для GET параметр прикреплены к заголовку URL, тогда как для POST параметр помещается в тело сообщения. Метод RestSharp AddQueryParameter() добавит только параметры (Query) в заголовок сообщения, тогда как AddParameter() добавит только параметры в тело mesasge. Как показано ниже, GET имеет один параметр запроса со значением "Flavors". Для POST параметры contact_name и company_name расположены в нижней части тела сообщения.
Например:
Формат сообщения GET:
GET http://www.consumerdiarydemo.cbrnetwork.test.au/api/ConsumerDiary/getSizesOrFlavours/Flavours HTTP/1.1 Host: www.consumerdiarydemo.cbrnetwork.test.au Соединение: keep-alive Accept: application/json User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, например, Gecko) Chrome/58.0.3029.110 Safari/537.36 Referer: http://www.consumerdiarydemo.cbrnetwork.test.au/ConsumerDiaryPage2template Accept-Encoding: gzip, deflate, sdch Accept-язык: en-GB, en-US; q = 0.8, en; q = 0.6
Формат сообщения POST:
POST http://localhost: 1234567/api/customers HTTP/1.1 Accept: application/json, text/javascript,/; q = 0.01 X-Requested-With: XMLHttpRequest Content-Type: application/x-www-form-urlencoded; кодировка = UTF-8
{ "CONTACT_NAME": "value_data1", "company_name": "value_data2"}