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