MVC 4 – LogOff控制器操作,找不到404

我刚刚结束了一个大学项目,我不确定我是否一直盯着我的电脑太长时间并且遗漏了一些显而易见的东西,但是当我尝试将用户注销时,我得到了404而不是找到URL /帐户/ LogOff。

我有一个导航栏,显示登录/注销,具体取决于用户是,登录还是注销:

 

在我的帐户控制器中,Internet模板附带的默认LogOff操作:

 [HttpPost] [ValidateAntiForgeryToken] public ActionResult LogOff() { WebSecurity.Logout(); return View("Index"); } 

有人能告诉我为什么会发生这种情况 – 在我将笔记本电脑靠在墙上之前。 干杯。

您使用链接( tag)注销,当用户单击它时会导致HTTP GET请求,但您的操作仅限于提供POST请求(因为它使用[HttpPost]属性修饰)。

您需要将链接放入表单并生成POST请求,或者从您的操作中删除[HttpPost][ValidateAntiForgeryToken] (归功于GalacticCowboy)。

由于注销修改服务器状态,我不会删除[HttpPost]和[ValidateAntiForgeryToken]而是我将使用以下内容替换链接(锚标记)

 @using (Html.BeginForm("Log Out", "Account", FormMethod.Post, new { id = "logoutForm" })) { @Html.AntiForgeryToken() Log Out } 

我在遗留应用上遇到了这个问题。 我修复它的方法是检测提供的返回Url是’/ Account / LogOff’并相应地采取行动。 从’AccountController.cs’文件,’登录’方法:

 if (returnUrl == "/Account/LogOff") { return this.RedirectToLocal(null); } else { return this.RedirectToLocal(returnUrl); }