webentwicklung-frage-antwort-db.com.de

RestSharp JSON-Parameter buchen

Ich versuche, einen sehr einfachen REST -Aufruf an meine MVC 3-API auszuführen, und die von mir übergebenen Parameter sind nicht an die Aktionsmethode gebunden.

Klient

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

Server

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
}

Fehlt mir hier etwas?

116
Wesley Tansey

Sie müssen den Körper nicht selbst serialisieren. Mach einfach 

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

Wenn Sie stattdessen einfach POST params möchten (was sich immer noch Ihrem Modell zuordnen würde und viel effizienter ist, da es keine Serialisierung für JSON gibt), machen Sie Folgendes:

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

In der aktuellen Version von RestSharp (105.2.3.0) können Sie dem Anforderungshauptteil ein JSON-Objekt hinzufügen mit:

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

Diese Methode setzt den Inhaltstyp auf application/json und serialisiert das Objekt in eine JSON-Zeichenfolge.

34
Chris Morgan

Das hat bei mir funktioniert, für meinen Fall war es ein Beitrag für die Login-Anfrage: 

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  

karosserie :

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

Hoffe das wird jemandem helfen. Es hat bei mir funktioniert -

RestClient client = new RestClient("http://www.example.com/");
RestRequest request = new RestRequest("login", Method.POST);
request.AddHeader("Accept", "application/json");
var body = new
{
    Host = "Host_environment",
    Username = "UserID",
    Password = "Password"
};
request.AddJsonBody(body);

var response = client.Execute(request).Content;
2
Sandy

Wenn Sie eine List von Objekten haben, können Sie sie wie folgt in JSON serialisieren:

List<MyObjectClass> listOfObjects = new List<MyObjectClass>();

Und dann addParameter verwenden:

requestREST.AddParameter("myAssocKey", JsonConvert.SerializeObject(listOfObjects));

Und Sie müssen das Anforderungsformat auf JSON setzen:

requestREST.RequestFormat = DataFormat.Json;
0
tomloprod