从API操作重定向到MVC操作

时间:2016-03-17 16:35:54

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

我正在使用 ASP.NET Core RC1 ,我有一个API动作,客户端使用Angular调用它:

[HttpPost("account/signin")]
public async Task<IActionResult> SignIn([FromBody]SignInModel model) {

  if (ModelState.IsValid) {

    // Redirect to Home/Index here

  } else {       

    return HttpBadRequest();

  }

}

如何从客户端调用的此操作重定向到Home / Index操作以加载该页面?

1 个答案:

答案 0 :(得分:2)

您需要在Angular中处理重定向,而不是在服务器上。您的登录API应该向Angular返回成功的指示,然后在调用API的Angular控制器中,您需要检查响应值并转换到相关页面。

如果您从API返回重定向响应,Angular将简单地遵循该重定向,然后将Home / Index的内容接收到其HTTP请求对象中,这不太可能是您想要的。

API方法:

[HttpPost("account/signin")]
public async Task<IActionResult> SignIn([FromBody]SignInModel model) {

    if (ModelState.IsValid) {
        return new { Authenticated = true };
    } else {       
        return HttpBadRequest();
    }
}

以下是您在Angualar控制器中可能需要的处理代码类型的示例(假设“/”是Home / Index的URL):

$http.post(
    "account/signin",
    { "Username": vm.username, "Password": vm.password }
).then(function (authResponse) {
    if (authResponse.data.Authenticated) {
        // Reload the page:
        $window.location.href = "/";
    } else {
        vm.success = false;
        vm.failMessage = "Login unsuccessful, please try again.";
    }
}, function (errResponse) {
    // Error case.
    vm.failMessage = "Unable to process login - please try again."
});