Web-Api - Rückgabe ein dynamisches Objekt mit status-code 201
Ich versuche, die Rückkehr der zuletzt hinzugefügte entity-Id in einer Web-Api-Methode Aktion als JSON. Beispiel:
{ bookId = 666 }
Den Controller-Action-code ist wie folgt:
[HttpPost, Route("")]
public HttpResponseMessage Add(dynamic inputs)
{
int bookId = bookService.Add(userId, title);
dynamic book = new ExpandoObject();
book.bookId = bookId
return new HttpResponseMessage(HttpStatusCode.Created)
{
Content = new ObjectContent<dynamic>(book,
new JsonMediaTypeFormatter
{
UseDataContractJsonSerializer = true
})
};
}
Das problem hier ist, um es zu erreichen Rückgabe eines dynamischen Inhalten (ohne Dto) und die Rückkehr der HttpStatusCode.Angelegt (http-status 201).
Nun habe ich den nächsten Fehler:
{"Message":"Ein Fehler ist aufgetreten.","ExceptionMessage":"Die 'ObjectContent`1' type Fehler beim serialisieren der Antwort body für content-type 'application/json; charset=utf-8'.","ExceptionType":"System.InvalidOperationException","StackTrace":null,"InnerException":{"Message":"Ein Fehler ist aufgetreten.","ExceptionMessage":"No se espera el tipo' - System.Dynamisch ist.ExpandoObject' ...
wenn ich die new ObjectContent<dynamic>
durch new ObjectContent<ExpandoObject>
bekomme ich die richtige 201 status-header Antwort, aber das JSON Ergebnis ist wie folgt:
[{"Key":"bookId","Value":666}]
So, ist es möglich, zurück { bookId: 666} mit Dynamik (nicht Dtos) festlegen der header-status-code 201 (Created)?
Danke für Eure Hilfe.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Das Verhalten, die Sie sehen, ist richtig, weil ein
dynamic
/ExpandoObject
ist effektiv nur ein wrapper um eineDictionary<TKey, TValue>
.Wenn Sie wollen, dass es serialisiert ein Objekt, dann sollten Sie eine anonymes Objekt statt einer
ExpandoObject
z.B.Wenn
JsonMediaTypeFormatter
unterstützt keine anonymen Objekte, dann könnte man versuchen mit dem Standard-serializer