如何从另一个动作注销

时间:2014-06-20 00:38:11

标签: asp.net asp.net-mvc

在Microsoft ASP.NET MVC 5中,

如何从帐户控制器的LogOff操作以外的操作中签出用户?几年前我会使用返回RedirectToAction(“LogOff”,“Account”),但现在它不再起作用,因为LogOff是Post动作(不是GET)。

public ActionResult SomeActionOfSomeController() {

 // some logic
 return RedirectToAction("LogOut", "Account"); //does not work since LogOut has HttpPost attribute

}

3 个答案:

答案 0 :(得分:1)

这就是我这样做的方式,而且它正在使用GET方法,这是你要求的吗?

    [HttpGet]
    public ActionResult Logout()
    {
        WebSecurity.Logout();

        // instead of displaying logout page directly we redirect to confirmation page.
        // this will ensure auth cookie is cleared, which, in turn, ensures correct menu items are displayed

        return RedirectToAction("LogoutConfirm");
    }

    [HttpGet]
    public ActionResult LogoutConfirm()
    {
        return View();
    }

答案 1 :(得分:0)

你可以这样做吗?

@using (Html.BeginForm("LogOff", "Account"))
{
        @Html.AntiForgeryToken()
        <button type="submit">Logout</button>
}

你可以这样做,如果你想要一个链接,而不是按钮

@using (Html.BeginForm("LogOff", "Account",
        FormMethod.Post, new { id = "LogOffForm" }))
{
        @Html.AntiForgeryToken()
        <a href="@Url.Action("LogOff", "Account")"
            onclick="$('#LogOffForm').submit();">Logout</a>
}

答案 2 :(得分:0)

您的SomeActionOfSomeController是否存在于Account Controller或其他控制器中?

如果它存在于AccountController中,那么您可以执行以下操作,而不是调用redicttoaction。

    public ActionResult Index2()
    {            
        return Index3();
    }

    [HttpPost]
    public ActionResult Index3()
    {
        return Content("Test");
    }

如果是来自其他控制器操作,则必须创建AccountController的对象,然后调用Method。

希望这会对你有所帮助。