【问题标题】:Redirect from API action to MVC action从 API 操作重定向到 MVC 操作
【发布时间】:2016-03-17 16:35:53
【问题描述】:

我正在使用 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 动作以加载该页面?

【问题讨论】:

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


    【解决方案1】:

    您需要在 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();
        }
    }
    

    这是您可能希望在 Angular 控制器中处理代码的示例(假设“/”是 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."
    });
    

    【讨论】:

    • 这确实是我想要的。谢谢。
    猜你喜欢
    • 2016-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多