restclient net example deserialize c# json asp.net-mvc-3 rest restsharp

c# - net - restsharp post object json



RestSharp JSON Parameter Posting (3)

En la versión actual de RestSharp (105.2.3.0) puede agregar un objeto JSON al cuerpo de la solicitud con:

request.AddJsonBody(new { A = "foo", B = "bar" });

Este método establece el tipo de contenido a application / json y serializa el objeto a una cadena JSON.

Estoy tratando de hacer una llamada REST muy básica a mi API de MVC 3 y los parámetros que paso no son vinculantes para el método de acción.

Cliente

var request = new RestRequest(Method.POST); request.Resource = "Api/Score"; request.RequestFormat = DataFormat.Json; request.AddBody(request.JsonSerializer.Serialize(new { A = "foo", B = "bar" })); RestResponse response = client.Execute(request); Console.WriteLine(response.Content);

Servidor

public class ScoreInputModel { public string A { get; set; } public string B { get; set; } } // Api/Score public JsonResult Score(ScoreInputModel input) { // input.A and input.B are empty when called with RestSharp }

¿Me estoy perdiendo de algo?


Esto es lo que funcionó para mí, para mi caso era una publicación para solicitud de inicio de sesión:

var client = new RestClient("http://www.example.com/1/2"); var request = new RestRequest(); request.Method = Method.POST; request.AddHeader("Accept", "application/json"); request.Parameters.Clear(); request.AddParameter("application/json", body , ParameterType.RequestBody); var response = client.Execute(request); var content = response.Content; // raw content as string

cuerpo :

{ "userId":"[email protected]" , "password":"welcome" }


No tiene que serializar el cuerpo usted mismo. Solo haz

request.RequestFormat = DataFormat.Json; request.AddBody(new { A = "foo", B = "bar" }); // uses JsonSerializer

Si solo quiere los parámetros POST en su lugar (que aún se asignarían a su modelo y es mucho más eficiente ya que no hay serialización en JSON) haga esto:

request.AddParameter("A", "foo"); request.AddParameter("B", "bar");