it-swarm.com.ru

Разница между методами 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, и, согласно Fiddler, они, похоже, тоже генерируют тот же URL.

14
Nicholas

Чтобы ответить на ваш вопрос

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/myUrl в обоих случаях.

15
Fabio Salvalai

Чтобы ответить на ФП и всем, у кого могут возникнуть проблемы с концепцией .. Мне потребовалось некоторое время, чтобы обойти концепцию .. Возможно, вам нужно визуализировать стандарт RESTful, как создать сообщение запроса GET в URL против построения для сообщения запроса POST.

Вы заметите, что для GET параметр (ы) присоединен к заголовку URL , Тогда как для POST, параметр (ы) помещен в тело сообщения . RestSharp's Метод AddQueryParameter () добавляет только параметры (Query) в заголовок сообщения, тогда как AddParameter () добавляет только параметры в тело сообщения. Как показано ниже, GET имеет один параметр запроса со значением «Flavors». Для POST параметры contact_name и company_name находятся внизу тела сообщения.

Например:

GET формат сообщения:

GET http://www.consumerdiarydemo.cbrnetwork.test.au/api/ConsumerDiary/getSizesOrFlavours/Flavours HTTP/1.1 Хост: www.consumerdiarydemo.cbrnetwork.test.au Соединение: keep- живы Примите: application/json Пользователь-агент: 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-Language: en-GB, en-US; q = 0,8, ан; д = 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"}

0
SmoothyBoothy