2017-11-28 6 views
0

Ich habe eine C# -REST-Web-API und ich habe etwas Code wie folgt, die eine Anfrage an einen Endpunkt. Einige der Daten, die ich weitergeben möchte, sind ein Objekt meines eigenen Typs, und da es ein komplexes Objekt ist, möchte ich es mit POST weitergeben.Verwenden Sie RestSharp Post-Objekt als JSON und lesen Sie es von der anderen Seite des Aufrufs

RestClient client = new RestClient(Constants.Endpoints.serviceEndPoint) 
{ 
    Timeout = 1000 
}; 

string requestResource = Constants.Endpoints.apiEndPoint; 
RestRequest request = new RestRequest(requestResource, Method.POST); 
request.AddParameter("Authorization", $"Bearer {accessToken}", ParameterType.HttpHeader); 
request.AddHeader("Accept", "application/json"); 
request.AddParameter("id", id, ParameterType.UrlSegment); 
request.AddParameter("text/json", objectIWantToSerialize, ParameterType.RequestBody); 

IRestResponse response = client.Execute(request); 

Auf der anderen Seite, ich versuche, das Objekt selbst mit einigen Code wie diese

var provider = new MultipartMemoryStreamProvider(); 

await Request.Content.ReadAsMultipartAsync(provider); 

    foreach (var content in provider.Contents) 
    { 
     // what should I do here to read the content as a JSON 
     // and then transform it as the object it used to be before the call? 
    } 

Ich habe versucht, zu lesen, zu tun erwarten content.ReadAsJsonAsync < MyType>(); aber auch versucht warten content.ReadAsStringAsync(); und keiner von diesen funktioniert. Mache ich etwas falsch zu der Zeit, die ich in dem Kunden ausführe? Oder mache ich etwas auf der anderen Seite, während ich den Inhalt lese?

+1

Haben Sie versucht, einen Debug-Proxy wie [Fiddler] (https://www.telerik.com/fiddler) zu verwenden, um zu sehen, was tatsächlich an den Server gesendet wird? –

+0

Ich habe tatsächlich Fiddler verwendet und mir ist aufgefallen, dass der gesendete Wert überhaupt nicht die JSON-Form des Objekts ist. Bedeutet das, dass der request.AddParameter falsch ist? – user3587624

Antwort

1

Anstelle dieser Linie: request.AddParameter("text/json", objectIWantToSerialize, ParameterType.RequestBody);

Sie sollten die .AddBody(object) Methode verwenden. Sie sind also Code würde wie folgt aussehen:

RestRequest request = new RestRequest(requestResource, Method.POST); 
//add other headers as needed 
request.RequestFormat = DataFormat.Json; 
request.AddBody(objectIWantToSerialize); 

IRestResponse response = client.Execute(request); 

auf dem Server, wenn Sie MVC/WebAPI verwenden, können Sie den C# Typ als Eingang und ASP.NET wird es für Sie setzen nur deserialisieren . Wenn nicht, können Sie mehr Kontext darüber bereitstellen, wie Sie die Anfrage erhalten?

+0

Das scheint tatsächlich zu funktionieren. Vielen Dank! – user3587624

Verwandte Themen