注销按钮在mvc应用程序中不起作用

我有一个MVC应用程序,具有不同的用户帐户和密码。 登录function正常,但当我单击注销按钮时,我收到404错误说:

‘/’应用程序中的服务器错误。

无法找到该资源。 说明:HTTP 404.您正在查找的资源(或其中一个依赖项)可能已被删除,>其名称已更改,或暂时不可用。 请查看以下url,并确保拼写正确。

请求的URL:/ Account / LogOff

这是注销按钮的代码:

 

这是AccountController中的代码

  [HttpPost] [ValidateAntiForgeryToken] public ActionResult LogOff() { Session.Clear(); FormsAuthentication.SignOut(); return RedirectToAction("Index", "Home"); } 

Html.ActionLink呈现常规超链接,这会导致GET请求。

您的LogOff具有HttpPost属性,这意味着它只会回答POST请求。 删除属性,您的操作将起作用。 还不需要ValidateAntiForgeryToken ,它适用于表单。


注意:我不再支持我的原始答案。 虽然它解决了手头的问题,但由于浏览器预取和潜在的恶意行为 ,注销实际上应该是POST。 因此,不应使用超链接,而是应该有一个表单,其中提交按钮被设置为超链接。

我有同样的问题,我通过创建一个隐藏的表单来处理它,然后点击Log Out链接,它提交表单。 像这样

  LOGOUT 

它工作得很好

只是添加@Stijn给出的答案: ActionLink向服务器发送一个get请求,你的LogOff Action期待一个包含AntiForgeryTokenpost请求

你需要创建一个表单,使用这样的提交按钮:

  @using (Html.BeginForm("LogOff", "Account", FormMethod.Post, new { role = "form" })) { @Html.AntiForgeryToken()  } 

这将在帐户控制器中点击您的LogOff操作:

 [HttpPost] [ValidateAntiForgeryToken] public ActionResult LogOff() { AuthenticationManager.SignOut( DefaultAuthenticationTypes.ApplicationCookie); return RedirectToAction("Index", "Home"); }