2013-05-15 3 views
3

У меня есть простой вопрос. Я создаю службу HTTP REST в ASP.NET WebApi 4, и у меня возникли проблемы с работой с моими привязками к модели.ASP.NET WebApi 4 Post FromBody Not Binding От JSON

Я использую следующий код, чтобы принять HTTP-запрос POST и обработать логин. Из того, что я могу собрать, ASP.NET WebApi 4 будет десериализовать JSON для вас и привязать к принятой модели. Я установил свою модель, но всякий раз, когда я тестирую службу через отладчик, я получаю NullReferenceExecption на объекте UserPostData.

Из того, что я могу сказать, у меня все правильно настроено, но оно просто не работает. Ниже мой 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, когда он должен упоминать веб-API ASP.NET? – bounav

+0

@bounav вопрос обновлен –

ответ

3

Убедитесь, что заголовок Content-Type присутствует в вашем запросе.

Измените JSon быть, как показано ниже:

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

А также добавить следующий код в сообщение ваших действий, чтобы увидеть любые модели связывания ошибки:

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

Спасибо Киран, в этом была проблема. У меня был JSON с массивом объектов, и мой метод POST принимал только один пользовательский объект ... duh. –

1

мне делать, если это не знаю это только ваше форматирование, но ваш текущий JSON представляет массив, содержащий один элемент типа UserPostData. Если это правда, измените свой запрос на отправку объекта вместо массива или замените контроллер на поддержку массивов.

BTW Я считаю, что FromBody является поведением по умолчанию для сложных типов, таких как ваш класс.

Смежные вопросы