注销按钮在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。 因此,不应使用超链接,而是应该有一个表单,其中提交按钮被设置为超链接。
只是添加@Stijn给出的答案: ActionLink
向服务器发送一个get请求,你的LogOff
Action期待一个包含AntiForgeryToken的post请求
你需要创建一个表单,使用这样的提交按钮:
@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"); }