MVC 4 - LogOff 控制器动作返回 404 未找到

10 浏览
0 Comments

MVC 4 - LogOff 控制器动作返回 404 未找到

我正在结束一个大学项目,不确定我是否盯着电脑太久,是否忽略了一些明显的东西,但是当我尝试注销用户时,URL /Account/LogOff 出现了404找不到的错误。

我有一个导航栏,根据用户是否已登录显示登录/登出选项:

    

在我的Account控制器中,有一个默认的LogOff操作,它是使用Internet模板自带的:

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

有人可以告诉我为什么会发生这种情况-在我把笔记本扔到墙上之前。谢谢。

0
0 Comments

问题出现的原因是LogOff控制器操作在注销时返回404错误。解决方法是替换链接(锚标签)为以下代码:

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

这是一个非常好的解决方案,容易实现并解释了问题所在。感谢!

0
0 Comments

在我的一个传统应用程序中遇到了这个问题。我解决的方法是检测当提供的返回URL是'/Account/LogOff'时,采取相应的行动。

从'AccountController.cs'文件的'Login'方法中:

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

问题的原因是在MVC 4中,使用默认的MVC控制器行为时,如果尝试访问一个不存在的URL,将会返回一个404 Not Found错误。在这种情况下,当用户注销并尝试访问'/Account/LogOff'时,会发生此错误。

解决方法是在登录方法中对返回URL进行检查。如果返回URL是'/Account/LogOff',则重定向到一个空的本地URL('null'参数)。这将绕过控制器行为,防止返回404 Not Found错误。如果返回URL不是'/Account/LogOff',则将返回URL重定向到本地URL。

通过这种方式,我们可以正确处理注销操作,并避免404 Not Found错误。

0