未重定向用户的控制器操作是从AJAX调用的

Controller action not redirect user is called from AJAX

本文关键字:AJAX 调用 控制器 重定向 用户 操作      更新时间:2023-09-26

我有控制器操作,用于注销用户。它可以通过两种方式实现:

  • 首先是当用户点击页面上的注销链接时,该链接看起来如下:<a href="/MayApp/Account/LogOut">Logout</a>它工作得很好
  • 第二种方法是当用户处于空闲状态时(一段时间内什么都不做)。一段时间后,AJAX调用发生,调用控制器的操作如下:

    $.ajax({url:'/MyApp/Account/LogOut',类型:"GET",成功:函数(){sessionStorage.removeItem("当前时间");}})

问题是因为第二种方式不能正常工作。它通常调用控制器操作,但控制器操作从不将用户重定向到登录页面。用户已注销,但仍停留在同一页面上。

我以以下方式使用重定向:

[AllowAnonymous]
    public ActionResult LogOut()
    {
        // Some Logic
        return Redirect(Url.Action("Login", "Account"));
    }

我的问题是:如果我使用异步调用,会发生这种情况吗?

我也尝试过同步AJAX调用,但它不起作用。

如何用与AJAX不同的方式调用控制器操作?

感谢

尝试:

return RedirectToAction("Login", "Account");

编辑

问题是,因为AJAX调用调用的是Logout操作,所以重定向的是AJAX调用。考虑到这一点,只需在JavaScript中使用window.location执行客户端重定向即可。

你可以使用类似的东西:

return JavaScript("window.location = 'http://www.google.co.uk'");

或者重新加载当前页面(因此任何其他路由都会生效,表示用户无权查看此页面。

return JavaScript("location.reload(true)");