我正在使用ASP.NET MVC4应用程序,因此,必须使用traditional
选项发送通过ajax发送到服务器的所有数组数据。 (对于POST变量没有[]
。)
问题是,我还有一个过滤器设置,需要在每次ajax POST时发送AntiforgeryToken。
我已经使用ajaxPrefilter
这样解决了这个问题:
$.ajaxPrefilter(function (options, originalOptions) {
if (options.type.toUpperCase() == "POST") {
options.data = $.param($.extend(originalOptions.data, { __RequestVerificationToken: "antiForgeryToken" }));
}
});
这很好用,并将__RequestVerificationToken
添加到所有POST。
但是,它也会导致我的数据不能根据traditional
标志进行参数化。
有人知道如何修改我的前置过滤器以解决这个问题吗?
示例可以在这里找到: http://jsbin.com/IxoKIKA/2/edit
答案 0 :(得分:2)
您忘记将traditional
参数传递给$.param()。你应该写:
options.data = $.param($.extend(originalOptions.data, {
__RequestVerificationToken: "antiForgeryToken"
}), true);