Разница между методами 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"}