我在我的 asp.net mvc 应用程序中使用 datatables.net 来创建和填充表。这样做时,我遇到了一个问题,即当我传递 requestverification 令牌时,出现错误并且没有创建和填充表。如果我不传递任何令牌并从操作方法中删除 [ValidateAntiForgeryToken] 属性,则不会出现任何问题。
在调试时我发现令牌是空值
var head = request.Headers.Get("__RequestVerificationToken");
下面是我的代码
$(document).ready(function () {
var token = $('[name=__RequestVerificationToken]').val();
//jQuery DataTables initialization
var oTable = $('#myTable').DataTable({
"ajax": {
"url": "/myapplication/MyReport/LoadReport",
"type": "POST",
"datatype": "json",
"headers" : { '__RequestVerificationToken': token }
},
},
"columns": [
{ "data": "Store", "name": "Store" },
{ "data": "Form", "name": "Form" },
{ "data": "Order", "name": "Order" },
{ "data": "Sku", "name": "Sku" },
{ "data": "RequestedDate", "name": "RequestedDate" },
{ "data": "Reason", "name": "Reason" }
],
"responsive": true,
"rowReorder": {
selector: 'td:nth-child(2)'
},
"serverSide": "true",
"order": [0, "asc"],
"processing": "true",
"language": {
"processing": "Loading. Please wait..."
},
"dom": "<'row'<'col-sm-6'l><'col-sm-6'p>>" +
"<'row'<'col-sm-12'tr>>" +
"<'row'<'col-sm-4'i>>"
});
});
该文档向您展示了获取这些令牌的好方法,并且还表明您存在概念错误。Asp.net 不生成 1个令牌,而是生成2 个令牌。一个存储在表单中,另一个存储在 cookie 中。您需要将两者都发送回服务器,以满足防伪要求。
您可以使用此 razor 函数来构建令牌:
<script>
@functions{
public string TokenHeaderValue()
{
string cookieToken, formToken;
AntiForgery.GetTokens(null, out cookieToken, out formToken);
return cookieToken + ":" + formToken;
}
}
</script>
然后将此值添加到您的标题中:
headers: {
'RequestVerificationToken': '@TokenHeaderValue()'
}
文档:https : //docs.microsoft.com/en-us/aspnet/web-api/overview/security/preventing-cross-site-request-forgery-csrf-attacks
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句