2016-08-22 1 views
1

Ich verwende HttpClient, um meine API aufzurufen. Ich baue ein Objekt und es in die PostAsJsonAsync wie dies vorbei:Mit HttpClient PostAsJsonAsync zum Aufruf meiner API, wie akzeptieren Sie den komplexen Typ in der API richtig?

var foo = new Foo 
{ 
    //We will say these are the only two properties on the model: 
    Id = 1, 
    Name = "Test" 
}; 

var response = await httpClient.PostAsJsonAsync("myApiPath/mytest", foo); 

Da ist in meinem API Ich versuche, die foo Objekt und einige Sachen mit ihm zu greifen und geben einen HttpStatusCode wie folgt aus:

Aber das funktioniert nicht, bekomme ich eine 500 Fehler, wenn ich <T> verwenden.

Nur um sicherzugehen, dass ich in der Lage war ahold der api zu bekommen und etwas passieren in I foo-"someRandomString" und dann in der API geändert änderte ich MyTest nur einen String in wie folgt zu akzeptieren: public HttpResponseMessage MyTest(string someRandomString) { } und das hat gut funktioniert.

Wie kann ich den komplexen Typ erhalten, um richtig in die API übergeben zu werden?

Antwort

2

Die Controller-Aktion sollte nicht generic:

[Route("mytest")] 
[HttpPost] 
public HttpResponseMessage MyTest(Foo foo) 
{ 
    //Do some stuff, and return the status code 
    return Request.CreateResponse(HttpStatusCode.OK); 
} 

wo natürlich die Foo Klasse die gleichen Eigenschaften entspricht, die Sie auf dem Client haben. Um Code-Duplikate zu vermeiden, können Sie Ihre Verträge in einem separaten Projekt deklarieren, das zwischen Ihren Web- und Client-Anwendungen geteilt wird.

+0

Danke für die Antwort. Kurz vor Ihrer Antwort hatte ich gerade die gleichen Modelle "DLL" referenziert und wollte versuchen, das gleiche Modell zu umgehen. Freut mich zu wissen, dass ich auf dem richtigen Weg war. – maxshuty

+0

Ja, Sie sind auf dem richtigen Weg. –

Verwandte Themen