当你使用助手时@Html.AntiForgeryToken()
在视图中,这是实际的 HTML 结果:
<input name="__RequestVerificationToken" type="hidden"
value="{ long cryptic code }">
该输入字段通常位于您的<form>
-元素,这意味着如果您提交该表单,它将附加到请求中。
当此输入字段位于表单之外或者您没有提交表单时,就会出现问题。不要害怕,有一个解决方案。属性[ValidateAntiForgeryToken]
告诉服务器查找名为“__RequestVerificationToken”的密钥。让我们为服务器提供它想要的东西!
首先,获取该值!
var antiforgeytoken = $('input[name=__RequestVerificationToken]').val();
其次,将其附加到您的 AJAX 请求中(我使用jQuery)
$.ajax({
url: 'something/something',
type: 'POST',
contentType: 'application/x-www-form-urlencoded; charset=UTF-8', // Default
data: { 'somekey': 'someval',
'__RequestVerificationToken', antiforgeytoken }
});
现在您的服务器很高兴,您也很高兴!
Update:
The 内容类型很重要,因为 MVC Binder 如何验证请求。如果您想使用其他内容类型,请使用此解决方案使用 $.ajax 发布 JSON 数据时如何提供 AntiForgeryToken? https://stackoverflow.com/questions/2906754/how-can-i-supply-an-antiforgerytoken-when-posting-json-data-using-ajax建议将防伪令牌和后数据分开在两个不同的参数中。