asp.net-mvc – 疑难解答反伪造令牌问题

前端之家收集整理的这篇文章主要介绍了asp.net-mvc – 疑难解答反伪造令牌问题前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个表单的帖子,一直给我一个反伪造的令牌错误

这是我的形式:

@using (Html.BeginForm())
{
    @Html.AntiForgeryToken()
    @Html.EditorFor(m => m.Email)
    @Html.EditorFor(m => m.Birthday)
    <p>
        <input type="submit" id="Go" value="Go" />
    </p>
}

这里是我的操作方法

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Join(Joinviewmodel model)
{
    //a bunch of stuff here but it doesn't matter because it's not making it here
}

这里是web.config中的machineKey:

<system.web>
  <machineKey validationKey="mykey" decryptionKey="myotherkey" validation="SHA1" decryption="AES" />
</system.web>

这里是我得到的错误

A required anti-forgery token was not supplied or was invalid.

我已经知道,改变用户的HttpContext将使令牌无效,但这不是在这里发生。我的Join操作的HttpGet只返回视图:

[HttpGet]
public ActionResult Join()
{
    return this.View();
}

所以我不知道发生了什么。我搜索过,一切似乎建议,这是machineKey更改(应用程序周期)或用户/会话更改。

还有什么可能发生吗?如何解决此问题?

解决方法

我不知道你是否意味着你能够得到错误按需 – 或者你在日志中看到,但在任何情况下,这里是一种方法,以保证防御令牌错误

等待…

>确保您已注销,然后输入您的登录信息
>双击登录按钮
>你会得到:

The provided anti-forgery token was meant for user “”,but the current user is “XXX@yahoo.com”.

(现在我将假设这个确切的错误消息在MVC4中改变,这本质上是你得到的相同的消息)。

有很多人在那里仍然双击一切 – 这是坏的!我只是想出了这一点,只是醒来后,这是如何通过测试我真的不知道。你甚至不需要双击 – 我有自己的错误,当我点击第二次,如果按钮没有反应。

我刚刚删除了验证属性。我的网站总是SSL,我不会过于担心的风险。我只需要它现在工作。另一种解决方案是使用javascript禁用按钮。

这可以在MVC4初始安装模板上复制。

原文链接:https://www.f2er.com/aspnet/254432.html

猜你在找的asp.Net相关文章