Bin*_*Cat 5 c# forms post antiforgerytoken
我发现了很多示例,演示了如何添加一个POST提交方法AntiForgeryToken的Ajax调用.正如标题所示,我的需求是不通过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)
事实证明,这个是“我怎么错过了……?!”的其中之一。时刻。虽然上述方法完全合法,但唯一的问题是 必须__RequestVerificationToken属于name属性而不是id我最初的示例中的 as 。我尝试发布修复后的表单,问题现在消失了。
显然,如果我可以使用该表达式,那么这首先就不是问题<% Html.AntiForgeryToken(); %>,但由于我在最初的帖子中所述的原因,这种特殊情况需要采用非常规的方法。所以,我想这是值得留意的事情!