MVC 4 - 注销控制器动作给予404未找到(MVC 4 - LogOff controller

2019-08-31 06:23发布

我只是结束了一个大学的项目,我不知道如果我一直在看电脑时间太长,我缺少明显的东西,但是当我尝试了登录用户,我得到一个404不发现的URL /帐号/注销。

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

<div class="nav-collapse collapse">
    <ul class="nav pull-right">
        <li class="dropdown" id="dropdown-login-div">
            @if (!Request.IsAuthenticated)
            {
                <a class="dropdown-toggle" href="#" data-toggle="dropdown">Sign In <strong class="caret"></strong></a>
            }
            else
            {
                @Html.ActionLink("Log Off", "LogOff", "Account")
            }
            <div class="dropdown-menu" id="dropdown-login">
                @Html.Partial("~/Views/Account/_LoginPartial.cshtml", new ViewDataDictionary<LetLord.Models.LoginModel>())
            </div>
        </li>
    </ul>
</div>

我的账号控制器自带的互联网模板默认注销等操作:

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult LogOff()
{
    WebSecurity.Logout();

    return View("Index");
}

有人能告诉我,为什么出现这种情况 - 之前,我把我的笔记本电脑靠在墙上。 干杯。

Answer 1:

您可以使用一个链接( <a/>标签)注销当用户点击它,但你的行动被限制为只提供(因为它是装饰有POST请求导致HTTP GET请求[HttpPost]属性)。

要么你需要把你的链接到一个窗体,并生成POST请求,或删除[HttpPost][ValidateAntiForgeryToken]从你的行动(学分GalacticCowboy)。



Answer 2:

由于注销修改服务器的状态,我不会删除[HttpPost]和[ValidateAntiForgeryToken]相反,我会替换为下面的链接(锚标记)

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

    @Html.AntiForgeryToken()
    <a href="javascript:document.getElementById('logoutForm').submit()">Log Out</a>

}


Answer 3:

我跑进一个遗留应用程序这个问题。 我固定它是检测时所提供的返回URL是“/帐号/注销”,并采取相应的行动方式。 从“AccountController.cs”文件,“登录”的方法:

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


文章来源: MVC 4 - LogOff controller action giving 404 not found