【问题标题】:Adding AntiForgeryToken to non-Ajax Form Submit将 AntiForgeryToken 添加到非 Ajax 表单提交
【发布时间】:2015-02-14 02:51:48
【问题描述】:

我找到了很多示例来演示如何将AntiForgeryToken 添加到Ajax 调用POST 提交方法。正如标题所示,我的需要是提交表单,而不是通过ajax 调用。相反,我只是使用 jQuery submit() 函数。

我在 razor 视图文件中的内容如下(注意:我使用的是 html 字符串文字,因为这个特定的 DOM 需要稍后动态附加到单独的元素):

var html =
    "<form id='exportPdfForm' action='" + exportUrl + "' method='post'>" +
        "<input type='hidden' id='exportContent'>" +
        "<input type='hidden' id='__RequestVerificationToken' value='@Html.AntiForgeryToken()'>" +
    "</form>";

而且,很明显,我正在使用下面的 jQuery 来提交这个表单:

$("#exportPdfForm").submit();

另外,使用 DOM Explorer 我可以看到 AntiForgeryToken 值正确到位:

但是,当我实际提交表单时,我仍然遇到 The required anti-forgery form field "__RequestVerificationToken" is not present 错误。我查看了其他几个问答,但似乎找不到任何可以阐明我的问题的内容。

我是否遗漏了一些明显的东西或做错了什么?

编辑(解决方案)

__RequestVerificationToken 分配给name 属性将修复它:

<input type='hidden' name='__RequestVerificationToken' value='...'>

【问题讨论】:

    标签: c# forms post antiforgerytoken


    【解决方案1】:

    这个结果是那些“我怎么会错过...?!”之一时刻。虽然上述方法完全合法,但唯一的问题是 __RequestVerificationToken 必须属于 name 属性,而不是像我最初的示例中那样属于 id。我尝试发布带有修复程序的表单,问题现在已经消失了。

    显然,如果我可以只使用 &lt;% Html.AntiForgeryToken(); %&gt; 表达式,这首先不会成为问题,但由于我在最初的帖子中所述的原因,这种特殊情况需要一种非常规的方法。所以,我想这是需要注意的事情!

    【讨论】:

    • 非常适合那些需要将表单发送到 Razor 页面并使用 OnPost() 获取输入值的人,谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-03-29
    • 2015-10-29
    • 2012-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-11
    相关资源
    最近更新 更多