在混合的asp.net Web窗体/ mvc 5.2.6应用程序中,使用JQuery.jqGrid v4.4.4,我正在努力寻找一种方法,用于在jqGrid发布时获取的Controller方法上使用ValidateAntiForgeryToken属性数据。
网格是只读的。 “数据类型”为“ json”,“ mtype”为“ POST”。我只是尝试将__RequestVerificationToken隐藏输入的值附加到要回传到Controller的数据上,但这不起作用。该网站只会引发缺少的防伪令牌异常。
我注意到,当要向控制器方法发送json数据的$ .ajax发布时,可以在“ headers”参数中传递__RequestVerificationToken。尽管jqGrid在后台进行$ .ajax调用,但不幸的是它没有headers参数。
我在SO上找到了可以通过editData参数传递令牌的示例(例如:JQGrid able to pass ValidateAntiForgeryToken through the main CRUD controls?),但是我的网格是只读的,无论如何我都想强制执行令牌当用户输入搜索条件,然后单击按钮填充网格时。
在填充jqgrid时,有什么方法可以使用ValidateAntiForgeryToken吗?
答案 0 :(得分:1)
您可以将postData
参数的__RequestVerificationToken
属性定义为以下功能:
postData: {
__RequestVerificationToken: function () {
return jQuery("input[name=__RequestVerificationToken]").val();
}
}
它将在填充网格期间向所有发送到服务器的请求添加__RequestVerificationToken
参数。
答案 1 :(得分:0)
Oleg的答案对我来说是正确的答案,但我也从https://github.com/VahidN/jqGrid-Samples/blob/master/jqGrid04/jqGrid04/Views/Home/Index.cshtml的广泛解决方案中大跌眼镜,该解决方案将验证令牌添加到每个ajax POST:
$(document).ajaxSend(function (elm, xhr, s) {
let securityToken = $('[name=__RequestVerificationToken]').val();
if (s.type === 'POST' && typeof securityToken != 'undefined') {
if (s.data.length > 0) {
s.data += "&__RequestVerificationToken=" + encodeURIComponent(securityToken);
}
else {
s.data = "__RequestVerificationToken=" + encodeURIComponent(securityToken);
}
}
});