请查看此
博客文章。
假设您有一个如下的Action方法:
```
[AcceptVerbs(HttpVerbs.Post),
ValidateAntiForgeryToken]
public ActionResult DeleteAccount(int
accountId) {
// delete stuff }
```
然后您通过以下方式调用它:
```
$.post('/home/DeleteAccount', {
accountId: 1000 }, function() {
alert('Account Deleted.'); });
```
由于POST请求中没有包含AntiForgeryToken,因此会失败。
幸运的是,修复这个问题并不需要太多的脑力。所有客户端组件的AntiForgeryToken所做的就是将令牌放入基本隐藏字段中。因此,您只需要提取该数据并在AJAX调用中包含它即可。
```
var token =
$('input[name=__RequestVerificationToken]').val();
```
```
$.post('/home/DeleteAccount', {
accountId: 1000,
'__RequestVerificationToken': token },
function() {
alert('Account Deleted.'); });
```
请注意,如果页面上有多个表单和多个AntiForgeryTokens,您将需要在jQuery选择器中指定要使用哪个。另一个需要注意的地方是,如果您正在使用jQuery的serializeArray()函数,则需要以稍微不同的方式添加它:
```
var formData =
$('#myForm').serializeArray(); var
token =
$('input[name=__RequestVerificationToken]').val();
formData.push({ name:
'__RequestVerificationToken', value:
token });
```
```
$.post('/home/DeleteAccount',
formData, function() {
alert('Account Deleted.'); });
```
更新:链接已修复。