【问题标题】:Session is not abandoned on logging out注销时不会放弃会话
【发布时间】:2015-02-10 12:38:12
【问题描述】:

我正在开发一个 MVC 4 应用程序,我是 MVC 的新手。我有一个用于注销的 Actionlink,但是当我单击它时,不会调用 ActionResult 方法。 谁能告诉我哪里出错了?

_Layout.chtml:

<nav>
    <ul id="menu">
        <li>@Html.ActionLink("Home", "Index", "Home")</li>
        <li>@Html.ActionLink("About", "About", "Home")</li>
        <li>@Html.ActionLink("Contact", "Contact", "Home")</li>
        @if (Session["LoggedinUser"] != null){
            <li>@Html.ActionLink("LogOut", "Login", "Home")</li>}
    </ul>
</nav>

HomeController.cs

[HttpPost]
public ActionResult LogOut()
{
    FormsAuthentication.SignOut();
    Session.Clear();
    Session.RemoveAll();
    Session.Abandon();
    return RedirectToAction("Index", "Login");
}

【问题讨论】:

  • 注销是 POST,因此您无法使用 actionlink 触发它,即 GET
  • 是的,将 POST 更改为 GET 有效!谢谢..

标签: c# asp.net-mvc asp.net-mvc-4 logout


【解决方案1】:

代替

  • @Html.ActionLink("LogOut", "Login", "Home")
  • } 试试
  • @Html.ActionLink("LogOut", "LogOut", "Home")
  • }。

    这对你有用..

    【讨论】:

      【解决方案2】:

      您的参数顺序错误,因此您实际上是在调用Login 操作:

      public static MvcHtmlString ActionLink(this HtmlHelper htmlHelper, 
          string linkText, string actionName, string controllerName)
      

      应该是

      @Html.ActionLink("Whatever Text You Want", "LogOut", "Home")
      

      【讨论】:

      • 我认为她的参数顺序正确,他只是错误地写了登录而不是注销
      • @AlexArt。我只是按照我所看到的进行,而我所看到的显然是参数顺序错误。
      • 绝对将这个答案与 Ibrahim ben Salah 在问题中的评论结合起来 - 您对[HttpPost] 的操作不会响应 GET 请求。根据您所拥有的,您应该能够删除该属性,并且在修复参数顺序后您会没事的。
      • 此更改适用于将 HttpPOST 更改为 HttpGET。谢谢!我很感激
      猜你喜欢
      • 2013-06-09
      • 2019-10-17
      • 2014-12-21
      • 1970-01-01
      • 1970-01-01
      • 2018-08-17
      • 1970-01-01
      • 2012-02-12
      • 1970-01-01
      相关资源
      最近更新 更多