注销时不会放弃会话
Posted
技术标签:
【中文标题】注销时不会放弃会话【英文标题】: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 有效!谢谢.. 【参考方案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。谢谢!我很感激以上是关于注销时不会放弃会话的主要内容,如果未能解决你的问题,请参考以下文章