Добавьте параметр GET в запрос POST с помощью RestSharp

Я хочу сделать запрос POST на такой URL-адрес:

http://localhost/resource?auth_token=1234

И я хочу отправить JSON в теле. Мой код выглядит примерно так:

var client = new RestClient("http://localhost");
var request = new RestRequest("resource", Method.POST);
request.AddParameter("auth_token", "1234");    
request.AddBody(json);
var response = client.Execute(request);

Как я могу установить параметр auth_token как параметр GET и сделать запрос как POST?


person leninyee    schedule 25.05.2012    source источник


Ответы (2)


Это должно работать, если вы 1) добавите токен к URL-адресу ресурса и 2) укажете ParameterType.UrlSegment следующим образом:

var client = new RestClient("http://localhost");
var request = new RestRequest("resource?auth_token={authToken}", Method.POST);
request.AddParameter("auth_token", "1234", ParameterType.UrlSegment);    
request.AddBody(json);
var response = client.Execute(request);

Это далеко не идеально, но самый простой способ, который я нашел... все еще надеюсь найти лучший способ.

person Ender2050    schedule 08.06.2012
comment
Разве нет более приятного решения, которое не требует использования UrlSegment в указанном вручную токене строки запроса? Это работает, но это неприятный обходной путь... и он не подходит во всех ситуациях. - person Sebastian Zaklada; 13.08.2012
comment
Это работает, но, как говорит @SebastianZaklada. Это не очень хорошее решение. - person wouterds; 01.08.2013
comment
У кого-нибудь это работает без UrlSegment? Это ужасно... Нам нужно иметь возможность добавлять параметр в URL независимо от ГЛАГОЛ HTTP, так как это возможно в соответствии со спецификациями HTTP... В моем случае у меня есть базовый класс, через который проходят все запросы, и подклассы, которые отправляют только данные сообщения, поэтому я хочу инкапсулировать этот токен внутри базового класса, иначе каждый раз, когда мне нужен токен, мне нужно добавить его в URL-адрес... например, это метод, который я вызываю в базовом классе Это не работает, если я ранее не установил заполнитель в запросе... Позор... - person Gutemberg Ribeiro; 28.09.2013
comment
защищенный T Execute‹T›(запрос RestRequest) где T : new() { if (!string.IsNullOrWhiteSpace (m_token)) { request.AddParameter (token, m_token); } var tcs = новый TaskCompletionSource‹T› (); m_client.ExecuteAsync‹T› (запрос, ответ => { tcs.SetResult (response.Data); }); tcs.Задача.Подождите(); вернуть tcs.Task.Result; } - person Gutemberg Ribeiro; 28.09.2013
comment
@SebastianZaklada, используйте ParameterType.QueryString. - person Der_Meister; 23.03.2014
comment
Я начал использовать интерполяцию строк в C# 6, и синтаксис такой же, только без дополнительной строки кода. $"resource?auth_token={authToken}" - person QueueHammer; 05.01.2017
comment
@QueueHammer, вы уверены, что интерполяция строк C # 6 будет правильно обрабатывать символы ?&= внутри значений (кодирование URL)? - person Der_Meister; 27.02.2017
comment
вы действительно должны помещать токен в URL-адрес? - person BKSpurgeon; 04.03.2018

Текущая версия RestSharp имеет короткий метод, использующий шаблон:

var request = new RestRequest("resource?auth_token={token}", Method.POST);
request.AddUrlSegment("token", "1234");

Кроме того, вы можете добавить параметр без шаблона:

var request = new RestRequest("resource", Method.POST);
request.AddQueryParameter("auth_token", "1234); 

or

var request = new RestRequest("resource", Method.POST);
request.AddParameter("auth_token", "1234", ParameterType.QueryString); 
person Der_Meister    schedule 23.03.2014
comment
Стоит отметить, что ParameterType.QueryString был добавлен в RestSharp v104.3. Мой проект ссылался на более старую версию, поэтому она была недоступна без обновления. - person John Hargrove; 24.02.2015
comment
v105.0.0 представил request.AddQueryParameter(name,value), который является оболочкой вокруг request.AddParameter(name, value, ParameterType.QueryString) - person Simon Tewsi; 26.02.2017