【发布时间】:2017-06-15 23:32:41
【问题描述】:
我使用@Html.AntiForgeryToken() 来装饰表单并尝试在ajax 调用中发送令牌,一开始我使用了以下代码:
var token = $('input[name="__RequestVerificationToken"]', form).val();
$.ajax({
type: "POST",
url: newurl,
headers: {'__RequestVerificationToken': token},
data: form.serialize(),
datatype: "JSON",
success: function..,
error: function..
})
它没有用,服务器没有得到我在上面为 __RequestVerificationToken 设置的值,而是继续使用一些旧的令牌值。
但是,在我将“标题”行切换到下面的行后,它会拾取我设置的令牌。
beforeSend: function (request)
{
request.setRequestHeader("__RequestVerificationToken", token);
},
为什么 headers 不起作用,但只有 beforeSend 起作用?到目前为止,我无法通过在线搜索找到任何线索。 标头是在 jQuery 1.5 中引入的,并且在文档中: https://api.jquery.com/jquery.ajax/
我正在使用 jQuery 1.11.1 和 .Net MVC 5.1。
【问题讨论】:
-
您使用的
form.serialize()将包含令牌。根本不需要headers选项。 -
但这对我不起作用,服务器没有在请求标头中获取令牌,而且使用 ajax 的 headers 属性对我也不起作用
-
如果你的
@Html.AntiForgeryToken()在你的<form>标签内,那么.serialize()会序列化它。 -
你是对的,它是序列化的,但是请求头没有得到它。
-
你不需要在header中设置它:)它将被发送到body中的控制器
标签: ajax asp.net-mvc antiforgerytoken