所需的防伪 cookie "__RequestVerificationToken" 不存在。

12
所需的防伪Cookie“__RequestVerificationToken”不存在。
我已经在cshtml和控制器中添加了它。
 using (Html.BeginForm())
 {
   @Html.AntiForgeryToken()

  //some code

  }

     [HttpGet]
    [ValidateAntiForgeryToken]
    public ActionResult Index()
    {
        using (var db = new SampleEntities())
        {
            return View(db.Rfps.ToList());
        }



    }

2
对于GET请求,您不需要使用ValidateAntiForgeryToken。Stripe。 - Vladimirs
确实。Cookie 应该在 GET 请求中设置,并在 POST 请求中进行检查。在 GET 上检查令牌只会导致错误,因为它是第一个请求,令牌尚未设置。 - MovGP0
3个回答

39

在我的情况下,我在我的web.config中有这样的设置:

<httpCookies requireSSL="true" />

但我的项目未设置使用SSL。注释掉该行或将项目设置为始终使用SSL可以解决此问题。


4
这个答案对我很有帮助。在开发过程中通常不使用SSL,因此将httpCookies设置为需要SSL会导致在localhost上访问网站时不发送cookie。当部署时一定要将其设置回true - 我通常会在我的Web.Release.config文件中这样做。 - Vladimir Petrov
我花了整整一天的时间才弄明白。如果没有你的答案,我会花费更多的时间!谢谢。 - E-A
2
当应用程序移动到终止SSL的设备后面时,我遇到了这个问题,而不是由Web服务器执行。 - Eric J.
我的项目没有SSL。所以我使用了这个 <httpCookies requireSSL="false" />,问题解决了 :) - Sajjad.HS

8
问题在于您在GET请求上使用了ValidateAntiForgeryToken属性。对于GET操作,您不需要使用此属性。有关更多信息,请参见这里

这是因为要进行发布的 ValidatAntiForgeryToken 吗? - user3233312
是的,它可以帮助您确保POST请求来自于由您的应用程序生成的页面。这种攻击称为跨站点请求伪造。 - Pavel

2

在我的情况下,是因为之前我运行了另一个Asp.Net网站。因此,cookie不能匹配本地主机。

我清除了我的cookie(只针对本地主机),现在一切都好了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接