将AntiForgeryToken添加到非Ajax表单提交

Bin*_*Cat 5 c# forms post antiforgerytoken

我发现了很多示例,演示了如何添加一个POST提交方法AntiForgeryTokenAjax调用.正如标题所示,我的需求是不通过ajax电话提交表格.相反,我只是使用jQuery submit()函数.

我在剃刀视图文件中的内容如下(注意:我使用的是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>";
Run Code Online (Sandbox Code Playgroud)

显然,我正在使用以下jQuery提交此表单:

$("#exportPdfForm").submit();
Run Code Online (Sandbox Code Playgroud)

此外,使用DOM资源管理器,我可以看到AntiForgeryToken值正确到位: 在此输入图像描述

但是,当我实际提交表单时,我仍然遇到The required anti-forgery form field "__RequestVerificationToken" is not present错误.我检查了其他几个Q&A,但似乎找不到任何可能对我的问题有所了解的东西.

我错过了一些明显或做错事吗?

编辑(解决方案)

分配__RequestVerificationToken给该name属性将解决这个问题:

<input type='hidden' name='__RequestVerificationToken' value='...'>
Run Code Online (Sandbox Code Playgroud)

Bin*_*Cat 4

事实证明,这个是“我怎么错过了……?!”的其中之一。时刻。虽然上述方法完全合法,但唯一的问题是 必须__RequestVerificationToken属于name属性而不是id我最初的示例中的 as 。我尝试发布修复后的表单,问题现在消失了。

显然,如果我可以使用该表达式,那么这首先就不是问题<% Html.AntiForgeryToken(); %>,但由于我在最初的帖子中所述的原因,这种特殊情况需要采用非常规的方法。所以,我想这是值得留意的事情!