我正在尝试使用防伪机制保护我的ajax帖子。
首先,我已将antiforgerytoken帮助方法调用添加到我的视图
@Html.AntiForgeryToken()
然后调整了我的jquery post call
var values = $(this).serialize() + "&__RequestVerificationToken=" + $("input[name='__RequestVerificationToken']").val();
$.post(url, values)
.success(page.submitSuccess)
.error(page.submitError)
.complete(page.submitComplete);
当然我用ValidateAntiForgeryToken
修饰了我的动作方法[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create(ProjectCreateCommand command)
{
....
}
但在提交表单后,它会抛出未提供所需的防伪标记或无效错误。
我已删除了令牌Cookie,并且我已重新启动浏览器。
我错过了什么吗?
答案 0 :(得分:1)
如果使用$(form).serialize();
,它将序列化所有输入标记,因此您可以通过$ .post jquery方法执行此操作。尝试这样的事情:
$("#you_form").submit(function (e) {
e.preventDefault();
$.ajax({
type: 'POST',
url: $(this).attr("action"), // get url from action attribute, your route setted by the Html.BeginForm()
data: $(this).serialize(), // serialize all input tags from this form
success: page.submitSuccess;
});
});
使用@Html.AntiForgeryToken()
没有问题,serialize方法会将它们加在一起。
请看一下这个链接:http://api.jquery.com/jQuery.post/