2016-05-16 38 views
5

我總是從身體得到空值爲什麼? 我使用小提琴手沒有問題,但郵遞員失敗。發佈json數據在身體到web api

我有一個Web API,這樣的:

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

我的郵遞員數據: enter image description here

和標題: enter image description here

+1

不就是需要是'爲gettoken([FromBody]用戶名字符串,[ FromBody]字符串密碼)'?或者你期望'value'包含整個json字符串? – Andrei

+0

我想以json字符串格式傳遞身體數據。我的代碼中有什麼問題? – Mennan

回答

8

的WebAPI是按預期工作,因爲你告訴它,你可以發送此JSON對象:

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

然後你問它將其反序列化爲string,這是不可能的,因爲它不是有效的JSON字符串。

解決方案1:

如果你想獲得實際的JSON作爲在value值將是:

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

,那麼你需要設置請求的主體中的字符串郵遞員是:

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

解決方案2(我假設這是你想要的):

創建一個匹配JSON的C#對象,以便WebAPI可以正確地反序列化它。

首先創建一個你的JSON匹配類:

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

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

在你的方法,然後使用此:

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

您正在發佈一個對象,並試圖將其綁定到一個串。 相反,創建一個類來表示數據:

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; 
}