2011-04-11 30 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(..)动作。这将阻止操作链接触发此操作。