簡體   English   中英

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

[英]MVC 4 - LogOff controller action giving 404 not found

我剛剛結束了一個大學項目,我不確定我是否一直盯着我的電腦太長時間並且遺漏了一些顯而易見的東西,但是當我嘗試將用戶注銷時,我得到了404而不是找到URL /帳戶/ LogOff。

我有一個導航欄,顯示登錄/注銷,具體取決於用戶是,登錄還是注銷:

<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>

在我的帳戶控制器中,Internet模板附帶的默認LogOff操作:

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

    return View("Index");
}

有人能告訴我為什么會發生這種情況 - 在我把筆記本電腦靠在牆上之前。 干杯。

您使用鏈接( <a/> tag)注銷,當用戶單擊它時會導致HTTP GET請求,但您的操作僅限於提供POST請求(因為它使用[HttpPost]屬性修飾)。

您需要將鏈接放入表單並生成POST請求,或者從您的操作中刪除[HttpPost][ValidateAntiForgeryToken] (歸功於GalacticCowboy)。

由於注銷修改服務器狀態,我不會刪除[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>

}

我在遺留應用上遇到了這個問題。 我修復它的方法是檢測提供的返回Url是'/ Account / LogOff'並相應地采取行動。 從'AccountController.cs'文件,'登錄'方法:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM