【问题标题】:What is causing the model to null是什么导致模型为空
【发布时间】:2017-03-19 22:26:51
【问题描述】:

角度服务:-

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 模型时,它的所有值都为空。

我的 LoginVM 类

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

为什么我的属性为空?

【问题讨论】:

  • 发布控制器
  • @sachilaranawaka,控制器已经发布。#WebAPI
  • 尝试在您的服务调用中直接发送用户对象,如data: user,
  • 您是否在网络标签处确认了您的数据是否发送成功?

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


【解决方案1】:

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

$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 是一个复杂类型(类)。

另外,我过去也遇到过这种情况,有时 Visual Studio 会播放,但调试不正确。如果您使用的是 IDE,则值得关闭 Visual Studio 并重新打开它。

【讨论】:

  • @Kgn-web 尝试发送data: user 而不是data: {model: user}
  • @Kgn-web 你说 console.log(user) 打印 :{'username': 'username@gmail.com', 'password': 123'} 它应该打印 {'username': 'username@gmail.com', 'password': '123'} 注意 123 上缺少的引号
  • @cnorthfield 2 是的。它也让我分享我的控制器
  • @Kgn-web 在 Ajax 请求中发送之前尝试匹配对象属性的大小写(“用户名”而不是“用户名”)
  • @Alex,我用[Serializable] 属性装饰了我的班级,当我删除此属性时,模型开始获取值。但我仍然在想标记一个类 [Serializable] 属性有什么不同?如果可以的话,请添加您的想法谢谢。
猜你喜欢
  • 1970-01-01
  • 2021-10-06
  • 2019-06-18
  • 1970-01-01
  • 1970-01-01
  • 2011-05-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多