是什么导致模型为null

时间:2017-03-18 12:05:46

标签: angularjs ajax asp.net-web-api

Angular Service: -

app.service('loginService', ['$http', function ($http) {

this.userLogin = function (user) {
   console.log(user); //prints {'username': 'username@gmail.com', 'password': 123'}
    $http(
   {
       url: "/api/user/login",
       method: "POST",
       data: { 'model': user },
       contentType: "application/json"
   })
   .then(function (data) {
       if (data.status.toLower() === "success") {
           return data;
       }
       else {
           return null;
       }
   });
}

角度控制器

app.controller('homeCtrl', ['$scope', 'loginService', function ($scope, loginService) {
$scope.login = function (user) {
    debugger;
    console.log($scope.user);
    var data = loginService.userLogin($scope.user);
}

}]);

的WebAPI。

[Route("api/user/login")]
    public void Post([FromBody]LoginVM model)
    {
        if(ModelState.IsValid)
        {

        }
        else
        {

        }
    }

但是当我调试WebAPI模型时,它将所有值都设置为null。

我的LoginVM类

 [Required]
    public string Username { get; set; }
    [Required]
    public string Password { get; set; }

为什么我将属性设为null?

1 个答案:

答案 0 :(得分:0)

您错误地传递了内容类型标头。它作为header参数的一部分传递,如下所示:

$http({
    url: "/api/user/login",
    method: "POST",
    data: { 'model': user },
    headers: {
        "Content-Type": "application/json"
    }
}).then(function (data) {
   if (data.status.toLower() === "success") {
        return data;
   } else {
       return null;
   }
});

但是,除非您更改了默认标题,否则您甚至不需要传递内容类型。 See the default headers in the documentation

所以你可以简单地提出你的要求:

$http({
    url: "/api/user/login",
    method: "POST",
    data: { 
        model: user 
    }
}).then(function (data) {
   if (data.status.toLower() === "success") {
        return data;
   } else {
       return null;
   }
});

您不应该在方法上使用[FromBody]属性,因为LoginVM是一个复杂类型(Class)。

此外,过去我曾经有过视觉工作室播放且未正确调试的情况。如果这是您正在使用的IDE,那么值得关闭视觉工作室并重新打开它。