有關Html.AntiForgeryToken()的使用其實網上的說明很多了,比如http://blog.csdn.net/cpytiger/article/details/8781457
那麼我們寫的AJAX調用怎麼辦了,難道需要修改所有的ajax請求資料嗎?我個人比較懶惰喜歡寫一個通用的代碼.其實原理很簡單就是攔截ajax請求,然後追加自己的資料.注意在ajax傳輸資料的時候可以是String/object,是以這裡需要處理一下:
if (typeof data !== "string") {
data = $.param(data);
}
一般我們都是在ready方法中攔截指定方法:
var oldajax = $.ajax;
$.ajax = function () {
var len = arguments.length;
for (var i = 0; i < len; i++) {
var data = arguments[i].data;
var type = $.trim(arguments[i].type);
type = type.toLowerCase();
if (data && type=="post") {
var tokenstr = $(document.getElementsByName("__RequestVerificationToken")).val();
if (typeof data !== "string") {
data = $.param(data);
}
data = data + "&__RequestVerificationToken=" + tokenstr;
arguments[i].data = data;
}
}
oldajax.apply(null, arguments);
}
全部的js code 如下:
$(function () {
var oldajax = $.ajax;
$.ajax = function () {
var len = arguments.length;
for (var i = 0; i < len; i++) {
var data = arguments[i].data;
var type = $.trim(arguments[i].type);
type = type.toLowerCase();
if (data && type=="post") {
var tokenstr = $(document.getElementsByName("__RequestVerificationToken")).val();
if (typeof data !== "string") {
data = $.param(data);
}
data = data + "&__RequestVerificationToken=" + tokenstr;
arguments[i].data = data;
}
}
oldajax.apply(null, arguments);
}
$('#btn1').click(function () {
$.ajax({
type: "POST",
url: "home/SecurityPost",
// data: "name=John&location=Boston",
data: { "name": "John", "location": "Boston" },
success: function (msg) {
alert("Data Saved: " + msg);
}
});
});
});