我尝试使用angularjs客户端和ASP MVC 6 beta 4 Web Api创建一个非常基本的登录示例。
角度控制器端的登录呼叫:
function login() {
vm.dataLoading = true;
$http.post('/api/account/login', {
model: {
Email: vm.username,
Password: vm.password,
RememberMe: vm.rememberMe
}
})
.success(function (data) {
vm.dataLoading = false;
if (data.success) {
logger.info(data.message);
if ($scope.returnToState) {
$state.go($scope.returnToState.name, $scope.returnToStateParams);
}
else {
$state.go('dashboard');
}
}
else {
vm.error = data.message;
}
})
.error(function (error) {
vm.dataLoading = false;
vm.error = data;
});
}
API入口点:
[Route("login")]
[HttpPost]
public async Task<IActionResult> Login(LoginViewModel model)
var result = await SignInManager.PasswordSignInAsync(model.Email, model.Password, model.RememberMe, shouldLockout: false);
if (result.Succeeded)
{
return Json(new { success = true, message = "Login success !" });
}
else
{
return Json(new { success = false, message = "Invalid login attempt." });
}
}
模特:
public class LoginViewModel
{
public string Email { get; set; }
public string Password { get; set; }
public bool RememberMe { get; set; }
}
当我到达登录入口点时,LoginViewModel实例的成员设置为null(除了将RememberMe设置为false),即使在$ http.post调用之前已经很好地定义了视图模型值
您知道为什么序列化过程不起作用吗?我读到angular js post方法使用JSON作为数据类型。
我假设Web Api支持Json内容协商(根据this帖子),但也许我错了,并且在Startup.cs文件中添加了一些配置。
答案 0 :(得分:2)
我应该将json数据格式化为:
$http.post('/api/account/login', {
Email: vm.username,
Password: vm.password,
RememberMe: vm.rememberMe
})
我应该在API原型中添加[FromBody]指令:
public async Task<IActionResult> Login([FromBody]LoginViewModel model)