JSON Körper ist nicht deseralized von NancyModule
Ich habe eine route in mein Modul soll akzeptieren, eine JSON-Organ für die blog-post. Problem ist, dass der request-body nicht seralized. Wenn ich debug sehe ich die folgenden Werte auf Anfrage:
this.Request.Body.Length: 93
x.Keys.Count: 0
Die route
Post["/Blog"] = x =>
{
var post = this.Bind<Post>(); //Breakpoint
PostService.Save(post);
return post;
};
Den HTTP-request
POST /Blog HTTP/1.1
Host: localhost:57888
Content-Type: application/json
Cache-Control: no-cache
{ "Post": { "Title":"Hello", "Content":"World", "Created":"2014-04-26" } }
Du musst angemeldet sein, um einen Kommentar abzugeben.
Deserialisierung:
Es ist nichts falsch mit Ihrem code, das problem ist, Sie haben gewickelt Ihr JSON:
Objekt hat eine Eigenschaft namens
Post
, dann hat es den eigentlichen Beitrag.Aktualisieren Sie Ihre Körper so Aussehen:
{ "Title":"Hello", "Content":"World", "Created":"2014-04-26" }
Diese am ehesten entspricht, die Eigenschaften Ihrer
Post
Objekt.Unten ist die Serialisierung, um die client -, nicht, was die Frage war die bitte für
Serialisierung:
Müssen Sie einen
Accept
header.Habe ich geschrieben über Nancy Conneg hier:
http://www.philliphaydon.com/2013/04/22/nancyfx-revisiting-content-negotiation-and-apis-part-1/
Ihrem Szenario nicht funktionieren, da Sie nur dem server mitzuteilen, was Ihr Inhalt ist, nicht das, was Sie erwarten im Gegenzug.
Akzeptieren
Mithilfe der Google Chrome-Plugin - Briefträger, können Sie testen Sie Ihr Szenario ähnlich wie diese:
Durch die Anwendung der
Accept
header alsapplication/json
den Inhalt zurückgegeben wird serialisiert werden..der json-url
Alternativ können Sie auch
.json
am Ende Ihrer URL wieder als JSON:http://yoursite.com/blog.json
Diese bewirkt, dass der JSON-Serialisierung zu kick in.
.AsJson()
Wenn Sie wollen immer JSON zurückgeben, unabhängig, können Sie schicken Sie Ihr Ergebnis mit
.AsJson()
Beachten Sie, wenn Sie die Rückgabe eines
dynamic
geben, dann werden Sie brauchen, um Sie zu wirken:return Response.AsJson((object)post);