将AngularJS模型传递给Web API,模型为空

时间:2015-07-05 21:24:31

标签: asp.net-mvc angularjs asp.net-mvc-4 model-view-controller asp.net-web-api

需要一些建议,我正在尝试在我正在处理的SPA项目上创建注册/登录部分。

我使用AngularJS作为前端,使用MVC Web API作为后端。

我遇到的问题是,当Web API的POST方法被命中时,我的模型显示为null。

这是我的代码:

AngularJS控制器

SugarGlidersMain.controller('RegisterController', ['$scope', 'UserService', '$location', '$rootScope', 'FlashService', function ($scope,UserService, $location, $rootScope, FlashService) {

$scope.user = [{ID:'',Username:'',Password:'',Email:'',LastLogin:'',Role:'User', FirstName:'',LastName:''}]

$scope.register = function() {
    var data = $scope.user;
    UserService.Create($scope.user)
        .then(function (response) {
            if (response.success) {
                FlashService.Success('Registration successful', true);
                $location.path('/login');
            } else {
                FlashService.Error(response.message);
            }
        });
}

注意:名字,姓氏,密码和电子邮件绑定到html中的输入字段

AngularJS服务

function Create(user) {
        return $http.post('/api/User', user).then(handleSuccess, handleError('Error creating user'));
    }

注意:用户在发送到Web API时包含数据

的WebAPI

// POST api/user
    public void Post([FromBody]UserModel user)
    {
        string firstname = user.FirstName;
        string lastname = user.LastName;
    }

MVC模型

public class UserModel
{
    [DatabaseGenerated(DatabaseGeneratedOption.None)]
    public int ID { get; set; }

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

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

    [Required]
    public string Email { get; set; }

    public DateTime? LastLogin { get; set; }

    public string Role { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
}

将模型传递给Web API时,数据结构是否重要,例如,我可以简单地将用户名,电子邮件和密码传递给Web API而不使用其他属性,仍然使用UserModel吗?

提前谢谢。

1 个答案:

答案 0 :(得分:1)

在你当前的情况下,你将$scope.user数组传递给post但事情是你在数组中传递了整个数据,第一个元素控制器方法不会理解那个对象,因为它与实际的不同方法是期待的。因此,要在服务器上获取正确的对象,您应该传递正确的JSON。

当您将对象传递给API时,它应该传递单个用户对象而不是传递整个数组

UserService.Create($scope.user[0])

更好地将用户对象声明更改为对象

$scope.user = {ID:'',Username:'',Password:'',Email:'',LastLogin:'',Role:'User', FirstName:'',LastName:''};