1

我正在尝试使用防伪机制来保护我的 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)
{
    ....
}

但在提交表单后,它会抛出A required anti-forgery token was not provided or was invalid错误。

我已经删除了令牌 cookie,并且我已经重新启动了浏览器。

我错过了什么吗?

4

1 回答 1

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/

于 2012-06-05T12:29:36.237 回答