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

в результате:

2 ответов


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

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


чтобы ответить на OP и всех, кто может иметь проблемы с концепцией. Мне потребовалось некоторое время, чтобы добраться до концепции. Вероятно, вам нужно визуализировать стандарт RESTful о том, как построить сообщение запроса GET в url-адресе против построения сообщения запроса POST.

вы заметите, что для GET параметр(ы) прикреплены к заголовку URL-адреса в то время как для сообщения параметр(ы) помещаются в тело сообщения. Метод RestSharp AddQueryParameter() добавит только параметры (запроса) в заголовок сообщения, тогда как AddParameter () добавит только параметры в тело mesasge. Как показано ниже, GET имеет один параметр запроса со значением "Flavours". Для сообщения параметры contact_name и company_name расположены в нижней части тела сообщения.

например:

получить формат сообщения:

вам http://www.consumerdiarydemo.cbrnetwork.test.au/api/ConsumerDiary/getSizesOrFlavours/Flavours HTTP / 1.1 Хозяин: www.consumerdiarydemo.cbrnetwork.test.au Соединение: keep-alive Принять: 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 Референт:http://www.consumerdiarydemo.cbrnetwork.test.au/ConsumerDiaryPage2template Принять-кодировки: gzip-сжатия, сдуется, сдч Язык принятия: en-GB, en-US; q=0.8, en; q=0.6


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

пост http://localhost:1234567/api/customers HTTP / 1.1 Принять: application/json, text / javascript, /; q=0.01 X-Запрошено-С: XMLHttpRequest Тип контента: application / x-www-form-urlencoded; charset=UTF-8

{"contact_name":"value_data1","имя_компании":"value_data2"}