2013-05-15 46 views
3

我有一個簡單的問題。我正在ASP.NET WebApi 4中構建一個HTTP REST服務,並且在使模型綁定正常工作時遇到了一些麻煩。ASP.NET WebApi 4 Post FromBody不綁定來自JSON

我正在使用以下代碼來接受POST HTTP請求並處理登錄。從我可以收集的內容ASP.NET WebApi 4將爲您反序列化JSON並綁定到接受的模型。我已經建立了我的模型,但每當我通過調試器測試服務時,我都會在UserPostData對象上得到一個NullReferenceExecption。

從我能告訴我有一切設置正確,但它只是不工作。以下是我發佈的JSON。有沒有人有任何想法,爲什麼我得到這個錯誤?

JSON [ { 「用戶名」: 「mneill」, 「密碼」: 「12345」 } ]

代碼從的WebAPI 4的控制器類

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

public class UserController : ApiController 
{ 
    // 
    // GET: /User/ 

    public string[] Get(string username) 
    { 
     return new string[] 
     { 
      "username", 
      username 
     }; 
    } 

    public HttpResponseMessage Post([FromBody] UserPostData body) 
    { 
     //string username = postData.Username; 
     //string password = postData.Password; 

     HttpResponseMessage response = new HttpResponseMessage(HttpStatusCode.OK); 

     if (body.Username == null) 
      response.StatusCode = HttpStatusCode.NotFound; 
     if (body.Password == null) 
      response.StatusCode = HttpStatusCode.NotFound; 

     return response; 
    } 
} 
+1

這是我還是那個問題提到ASP.NET MVC 4時應該提到ASP.NET Web API呢? – bounav

+0

@bounav問題已更新 –

回答

3

確保內容類型標題出現在您的請求中。

修改您的JSON是象下面這樣:

{ "Username": "mneill", "Password": "12345" } 

,並添加以下代碼後你的行動,看到任何模型綁定錯誤:

if (!ModelState.IsValid) 
     { 
      throw new HttpResponseException(Request.CreateErrorResponse(HttpStatusCode.BadRequest, this.ModelState)); 
     } 
+0

謝謝Kiran,這是問題所在。我有JSON有一個對象數組,我的POST方法只接受一個用戶對象...呃。 –

1

我不知道,如果這只是您的格式,但您當前的JSON表示包含UserPostData類型的一個元素的數組。如果這是真的,則更改發送對象而不是數組的請求,或者更改控制器以支持數組。

順便說一句FromBody是像你的類一樣的複雜類型的默認行爲。