2014-06-13 48 views
1

我有一個MVC應用程序,具有不同的用戶帳戶和密碼。登錄功能工作正常,但當我點擊註銷按鈕時,我得到一個404錯誤說:退出按鈕不能在mvc應用程序中工作

'/'應用程序中的服務器錯誤。

無法找到該資源。 描述:HTTP 404.您正在查找的資源(或其某個依賴項)可能已被刪除,名稱已更改或暫時不可用。請檢查以下網址並確保它拼寫正確。

請求的URL:/帳號/註銷

這是註銷按鈕的代碼:

 <div class="navbar-collapse collapse"> 
      <ul class="nav navbar-nav"> 
       <li>@Html.ActionLink("Log Off", "LogOff", "Account")</li> 

      </ul> 
     </div> 

這是的AccountController

[HttpPost] 
    [ValidateAntiForgeryToken] 
    public ActionResult LogOff() 
    { 
     Session.Clear(); 
     FormsAuthentication.SignOut(); 
     return RedirectToAction("Index", "Home"); 
    } 
+0

我相信這是HttpPost屬性。你有沒有嘗試刪除它。 – Pharylon

回答

6

Html.ActionLink呈現代碼一個常規的超鏈接,它會導致一個GET請求。

您的LogOff擁有HttpPost屬性,這意味着它只會回覆POST請求。刪除該屬性並且您的操作將會起作用。 ValidateAntiForgeryToken也是不需要的,它是用於表單的。


注:我不再支持我的原始答案。雖然它解決了手頭的問題,但由於browser prefetchingpotential malicious behaviour,註銷應該是真正的POST。因此,不要使用超鏈接,而應該有一個帶有提交按鈕樣式的表單作爲超鏈接。

+0

謝謝你的工作 – Kevin

1

我有同樣的問題,我通過創建一個隱藏窗體來處理它,然後點擊註銷鏈接,它提交表單。像這樣

<form method="post" action="@Url.Action("LogOff", "Account")" id="signoutfrm" style="display:none;"> 
@Html.AntiForgeryToken() 
</form> 

<a href="" onclick="$('#signoutfrm').submit(); return false;">LOGOUT</a> 

它的工作完美

相關問題