在我的SPA网站上,我需要通过ajax将反服务令牌发送到服务器。我用这篇文章的方法:
所以在我的layout.cshtml中我有本地函数:
<script>
@functions{
public string TokenHeaderValue()
{
string cookieToken, formToken;
AntiForgery.GetTokens(null, out cookieToken, out formToken);
return cookieToken + ":" + formToken;
}
}
</script>
我有一个名为register.js的独立js文件,我在ajax中调用了这个函数:
$.ajax({
url: 'User/JsonRegister',
type: "POST",
data: d,
headers: {
'RequestVerificationToken': '@TokenHeaderValue()'
},
success: function (result) {
},
error: function (result) {
}
});
问题是我永远不会调用@TokenHeaderValue()并且我不断收到此错误:
The required anti-forgery form field "__RequestVerificationToken" is not present.
我该如何解决这个问题?
答案 0 :(得分:0)
问题是在单独的js文件中使用服务器端帮助程序功能。如果需要在单独的js文件中调用ajax,请将@TokenHeaderValue()
值设置为隐藏字段,并读取js文件中隐藏字段的值。
答案 1 :(得分:0)
我以这种方式向我的数据添加标记:它解决了问题
AddAntiForgeryToken = function (data) {
data.__RequestVerificationToken = $('#__AjaxAntiForgeryForm input[name=__RequestVerificationToken]').val();
return data;
};
答案 2 :(得分:-1)
以JSON格式传递数据
$.ajax({
type:"POST",
datatype:"JSON",
data:{d:d}, // Remaining code is same
});
在控制器中使用方法签名之前使用[HttpPost]
,因为它是Post
请求。