我发现了大量示例,演示了如何在AntiForgeryToken
调用POST提交方法时添加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>";
显然,我使用以下jQuery提交此表单:
$("#exportPdfForm").submit();
此外,使用DOM Explorer我可以看到AntiForgeryToken
值已正确到位:
但是,当我实际提交表单时,仍然会遇到 The required anti-forgery form field "__RequestVerificationToken" is not present
错误。我检查了其他几个Q&amp; A&#39,但似乎找不到任何可能解决我问题的事情。
我在这里遗漏了一些明显或做错的事吗?
编辑(解决方案)
将__RequestVerificationToken
分配给name
属性将解决此问题:
<input type='hidden' name='__RequestVerificationToken' value='...'>
答案 0 :(得分:3)
这个结果证明是“我怎么想念那个......?!”时刻。虽然上述方法完全合法,但唯一的问题是__RequestVerificationToken
必须属于name
属性而不是id
属于我的初始示例。我尝试使用修复程序发布我的表单,问题现在已经消失。
显然,如果我可以使用<% Html.AntiForgeryToken(); %>
表达式,这首先不会成为一个问题,但是这个特殊情况需要采用非常规方法,因为我在我的初始帖子中说明了这一点。所以,我想这是值得注意的事情!