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?
答案 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,那么值得关闭视觉工作室并重新打开它。