需要一些建议,我正在尝试在我正在处理的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吗?
提前谢谢。
答案 0 :(得分:1)
在你当前的情况下,你将$scope.user
数组传递给post但事情是你在数组中传递了整个数据,第一个元素控制器方法不会理解那个对象,因为它与实际的不同方法是期待的。因此,要在服务器上获取正确的对象,您应该传递正确的JSON。
当您将对象传递给API时,它应该传递单个用户对象而不是传递整个数组
UserService.Create($scope.user[0])
或强>
更好地将用户对象声明更改为对象
$scope.user = {ID:'',Username:'',Password:'',Email:'',LastLogin:'',Role:'User', FirstName:'',LastName:''};