您需要使用Html.AntiForgeryToken助手来设置一个cookie,并发出一个隐藏字段具有相同的值。发送AJAX请求时,您还需要将此值添加到POST数据。
所以我会用一个正常的链接,而不是一个Ajax链接:
@Html.ActionLink(
"Delete",
"Delete",
"LabTest",
new {
id = item.LabTestID
},
new {
@class = "delete",
data_confirm = "Are You sure You want to delete (" + item.Description.ToString() + ") ?"
}
)
,然后把隐藏字段某处DOM(例如结束标记之前):
@Html.AntiForgeryToken()
终于悄悄地AJAXify删除锚点:
$(function() {
$('.delete').click(function() {
if (!confirm($(this).data('confirm'))) {
return false;
}
var token = $(':input:hidden[name*="RequestVerificationToken"]');
var data = { };
data[token.attr('name')] = token.val();
$.ajax({
url: this.href,
type: 'POST',
data: data,
success: function (result) {
},
error: function() {
}
});
return false;
});
});
现在你可以装饰你的Delete动作与ValidateAntiForgeryToken属性:
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Delete(int id)
{
...
}