Ajax post throws未提供所需的防伪标记或无效

时间:2012-06-05 11:18:52

标签: asp.net-mvc antiforgerytoken

我正在尝试使用防伪机制保护我的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,并且我已重新启动浏览器。

我错过了什么吗?

1 个答案:

答案 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/