Asp.net 如何从另一个操作注销

Asp.net 如何从另一个操作注销,asp.net,asp.net-mvc,Asp.net,Asp.net Mvc,在Microsoft ASP.NET MVC 5中 如何从帐户控制器的注销操作以外的操作注销用户?几年前,我会使用return RedirectToAction(“注销”、“帐户”),但现在它不再工作了,因为注销是一种后期操作(而不是GET) 你可以这样做,对吗 @using (Html.BeginForm("LogOff", "Account")) { @Html.AntiForgeryToken() <button type="submit">Lo

在Microsoft ASP.NET MVC 5中

如何从帐户控制器的注销操作以外的操作注销用户?几年前,我会使用return RedirectToAction(“注销”、“帐户”),但现在它不再工作了,因为注销是一种后期操作(而不是GET)


你可以这样做,对吗

@using (Html.BeginForm("LogOff", "Account"))
{
        @Html.AntiForgeryToken()
        <button type="submit">Logout</button>
}
@使用(Html.BeginForm(“注销”、“帐户”))
{
@Html.AntiForgeryToken()
注销
}
如果你想要一个链接而不是按钮,你可以这样做

@using (Html.BeginForm("LogOff", "Account",
        FormMethod.Post, new { id = "LogOffForm" }))
{
        @Html.AntiForgeryToken()
        <a href="@Url.Action("LogOff", "Account")"
            onclick="$('#LogOffForm').submit();">Logout</a>
}
@使用(Html.BeginForm(“注销”、“帐户”),
FormMethod.Post,新的{id=“LogOffForm”})
{
@Html.AntiForgeryToken()
}

我就是这样做的,它使用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();
    }

您的帐户控制器或其他控制器中是否存在某个控制器的某些操作

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

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

    [HttpPost]
    public ActionResult Index3()
    {
        return Content("Test");
    }
若它来自其他控制器操作,那个么您必须创建AccountController的对象,然后调用方法


希望这将对您有所帮助。

假设您正在实现默认的ASP.net登录/注销,您可以在控制器中粘贴以下代码

AuthenticationManager.SignOut(DefaultAuthenticationTypes.ApplicationCookie);
return RedirectToAction("Index", "Home");

注意:这两行代码与帐户/注销控制器操作方法中的代码相同。

OP询问如何从MVC控制器操作执行注销,而不是如何从呈现视图提交注销请求。这与我的问题无关。。。此外,注销操作应为HttpPost;你做错了。这是目前正在使用的一个启动和运行的应用程序,它的工作绝对没有问题,这里没有任何关于POST方法,除非你想使用它的POST方法。你可能需要解释更多关于这个问题,因为它似乎有点含糊不清。首先:你的注销操作应该是POST(而不是GET)。这是一个普遍的建议。第二:我不是问如何进行注销操作。。。这是微不足道的。我的问题是如何从另一个操作重定向到注销操作…请向我们解释,然后我们就可以了解,为什么我们应该使用POST而不是GET(为什么这作为一般建议很重要)?正如我在上面的代码中清楚地看到的,从
注销
操作重定向到
注销确认
操作?然后你应该根据你的问题重新考虑你的主要问题“但是现在它不再起作用了,因为注销是一个后期操作(非GET)”,这告诉人们HttpGet不再有效(过时)在MVC5上。你问问题时必须清楚。这并不意味着GET方法不再有效,我想您正在寻找类似于ASP.net mvc中的Server.Transfer的方法。是吗?根据你的问题,GET方法在MVC5上不再有效!!,这是不对的。这个问题对于用户dotnetstep来说已经足够清楚了,例如。。。没有断言明确表示“HttpGet不工作”。实际上,我想说的是RedirectToAction(“注销”,“帐户”)不再工作,因为注销是一个Post操作(不是GET)。它在另一个控制器上。我认为创建AccountController对象很难看,但它确实解决了我的问题。我知道,但如果这件事对你来说是一件好事,那么找到一些工作就好了。
AuthenticationManager.SignOut(DefaultAuthenticationTypes.ApplicationCookie);
return RedirectToAction("Index", "Home");