2012-05-25 20 views
15

Quiero hacer una petición POST a una URL como esta:Añadir un parámetro GET a una solicitud POST con RestSharp

http://localhost/resource?auth_token=1234 

Y quiero enviar JSON en el cuerpo. Mi código es como la siguiente:

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); 

¿Cómo puedo configurar el parámetro auth_token ser un parámetro GET y hacer la solicitud como la POST?

Respuesta

20

Esto debería funcionar si 1) añadir el token a la url de recursos y 2) especificar ParameterType.UrlSegment así:

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); 

Esto está lejos de ser ideal - pero la forma más sencilla que he encontrado. .. todavía esperando encontrar una mejor manera.

+3

¿No hay una solución más agradable, que no implica el uso de UrlSegment en un token de cadena de consulta especificado manualmente? Esto funciona, pero es una solución desagradable ... y no encaja bien en todas las situaciones. –

+0

Funciona, pero como dice @SebastianZaklada. No es realmente una solución "agradable". – wouterds

+4

¿Alguien lo hace funcionar sin el UrlSegment? Es terrible ... Necesitamos ser capaces de agregar parámetros en la URL independientemente del VERBO HTTP, ya que es posible seguir las especificaciones HTTP ... En mi caso, tengo una clase base donde todas las solicitudes pasan por alto y las subclases que envían solo los datos de entrada, entonces quiero encapsular este token dentro de la clase base; de ​​lo contrario, cada vez que necesito el token necesito agregarlo en la URL ... por ejemplo este es el método I llamar a la clase base , no vale el trabajo, a menos que previamente puesto el marcador de posición sobre la solicitud ... vergüenza ... –

25

La versión actual de RestSharp tiene un método corto que hace uso de una plantilla:

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

Alternativamente, se puede añadir un parámetro sin una plantilla:

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

o

var request = new RestRequest("resource", Method.POST); 
request.AddParameter("auth_token", "1234", ParameterType.QueryString); 
+5

Merece la pena señalar que ParameterType.QueryString se agregó en RestSharp v104.3. Mi proyecto hizo referencia a una versión anterior, por lo que no estaba disponible sin actualizar. –

+3

v105.0.0 introdujo 'request.AddQueryParameter (name, value)' que es un contenedor alrededor de 'request.AddParameter (name, value, ParameterType.QueryString)' –

Cuestiones relacionadas