Angular $http.post 到 ASP MVC 6 Web Api

Angular $http.post to a ASP MVC 6 Web Api

我正在尝试使用 angularjs 客户端和 ASP MVC 6 beta 4 Web Api.

创建一个非常基本的登录示例

angular控制器端的登录调用:

    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 post),但也许我错了,有一些配置可以添加 Startup.cs 文件。

  • 我应该将 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)