2011-04-11 54 views
0

我有我的登錄頁面上的以下antiforgerytoken定義是這樣的:AntiForgeryToken爲退出在ASP.NET MVC 3

<%=Html.AntiForgeryToken(Constants.AntiForgerySalt)%> 

我的登錄方法是這樣的:

[ValidateAntiForgeryToken(Salt = Constants.AntiForgerySalt)] 
    public ActionResult LogIn(string userName, string password, string attemptsKey) 
    { 
     ..... 
    } 

所有的作品好,除了我處理退出的方式之外。

對於註銷,我有一個這樣定義的ActionLink的:

<%=Html.ActionLink("Logout", "LogOut", "LogIn")%> 

這顯然意味着,沒有被髮送到服務器的形式。

在ActionLink的規定註銷操作執行,但是當它重定向到具有AntiForgeryToken指定的登錄頁面,我收到以下錯誤信息:

一個必需的未 提供的防僞標記或無效。

我很驚訝,因爲我認爲它只適用於發佈數據的場景。

如果我重定向到只顯示AntiForgeryToken的頁面,那麼爲什麼會出現此錯誤消息?

回答

0

您最簡單的解決方案是用[HttpPost]裝飾Login(..),並創建一個用[HttpGet]服務登錄頁面裝飾的Login(..)動作。這將阻止操作鏈接觸發此操作。