2016-05-16 5 views
5

Ich bekomme immer Null Wert vom Körper warum? Ich habe kein Problem mit Fiddler, aber Postbote ist fehlgeschlagen.Post json Daten in Körper zu Web api

Ich habe eine Web-api wie folgt aus:

[Route("api/account/GetToken/")] 
    [System.Web.Http.HttpPost] 
    public HttpResponseBody GetToken([FromBody] string value) 
    { 
     string result = value; 
    } 

Mein Postbote Daten: enter image description here

und Header: enter image description here

+1

nicht hat, ist sein müssen 'GetToken ([FromBody] string Benutzername, [ FromBody] String Passwort) '? Oder Sie haben erwartet, dass "Wert" die gesamte JSON-Zeichenfolge enthält? – Andrei

+0

Ich möchte meine Daten im Körper als JSON-String formatiert übergeben. Was ist das Problem in meinem Code? – Mennan

Antwort

8

WebAPI ist wie erwartet funktioniert, weil Sie es doch sagen, dass Sie das JSON-Objekt sind zu senden:

{ "username":"admin", "password":"admin" } 

Dann Sie fragen es zu deserialisieren es als string was unmöglich ist, da es keine gültige JSON-Zeichenfolge ist.

Lösung 1:

Wenn Sie die tatsächliche JSON wie im Wert von value wird erhalten möchten:

value = "{ \"username\":\"admin\", \"password\":\"admin\" }" 

dann die Zeichenfolge, die Sie in den Körper des Antrags einstellen müssen Postbote ist:

"{ \"username\":\"admin\", \"password\":\"admin\" }" 

Lösung 2 (ich gehe davon aus der Was Sie wollen):

Erstellen Sie ein C# -Objekt, das mit dem JSON übereinstimmt, damit WebAPI es ordnungsgemäß deserialisieren kann.

zuerst eine Klasse erstellen, die Ihre JSON entspricht:

public class Credentials 
{ 
    [JsonProperty("username")] 
    public string Username { get; set; } 

    [JsonProperty("password")] 
    public string Password { get; set; } 
} 

Dann in Ihrer Methode verwenden, um dies:

[Route("api/account/GetToken/")] 
[System.Web.Http.HttpPost] 
public HttpResponseBody GetToken([FromBody] Credentials credentials) 
{ 
    string username = credentials.Username; 
    string password = credentials.Password; 
} 
3

Sie veröffentlichen ein Objekt und versucht, es zu ein binden Zeichenfolge. Erstellen Sie stattdessen eine Art, die Daten darzustellen:

public class Credentials 
{ 
    public string Username { get; set; } 
    public string Password { get; set; } 
} 

[Route("api/account/GetToken/")] 
[System.Web.Http.HttpPost] 
public HttpResponseBody GetToken([FromBody] Credentials value) 
{ 
    string result = value.Username; 
} 
Verwandte Themen