Angular $ http.post到ASP MVC 6 Web Api

时间:2015-05-12 15:02:48

标签: angularjs post asp.net-core-mvc

我尝试使用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文件中添加了一些配置。

1 个答案:

答案 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)