MVC AntiForgery令牌错误

时间:2014-08-08 21:59:45

标签: c# asp.net-mvc

我想知道我应该如何解决以下错误/问题。我有一个表单正在提交,并在该表单上我使用AntiForgery令牌。表单的目的是登录该站点。

在视图中我有:

<%: Html.AntiForgeryToken()%>

控制器显示:

[HttpPost]
[HandleError(ExceptionType = typeof(HttpAntiForgeryException),Master = "MasterLogin", View = "Login")]
[ValidateAntiForgeryToken]
public ActionResult Login(LoginPresentation model, string returnUrl)
{
    //do stuff
}

它在大多数情况下都非常有效。期待以下情况。

  • 我登录网站
  • 退出网站
  • 清除我的缓存
  • 尝试进行身份验证

当我尝试登录时,出现以下错误: 所需的防伪cookie&#34; __ RequestVerificationToken_L1NTSS5NZW1iZXJzaGlwLlBvcnRhbA2&#34;不存在。

我应该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

只需确保针对使用ValidateAntiForgeryToken属性修饰的操作发送的每个请求都是通过HTTP POST进行的,并且它来自具有包含所需令牌的隐藏输入的表单。 它可以使用Html.AntiForgeryToken()生成,它看起来像这样:

<input name="__RequestVerificationToken" type="hidden" value="some value" />

与表单关联的令牌也会在客户端计算机上存储为Cookie,因此当您提交表单时, ValidateAntiForgeryToken 过滤器会检查以下内容:

  • 传入的请求有一个名为__RequestVerificationToken
  • 的cookie
  • 传入的请求有一个名为__RequestVerificationToken
  • 的Request.Form条目
  • 这些Cookie和Request.Form值匹配

了解更多here