我在登录页面上定义了以下antiforgerytoken,如下所示:
<%=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 :(得分:0)
您最简单的解决方案是使用[HttpPost]修饰Login(..),并创建一个用[HttpGet]修饰的Login(..)动作,该动作为Login页面提供服务。这将阻止操作链接触发此操作。