首页 > 解决方案 > 在 asp.net MVC 中使用 ValidateAntiForgeryToken 和 JQGrid?

问题描述

在使用 JQuery.jqGrid v4.4.4 的混合 asp.net web 表单/mvc 5.2.6 应用程序中,我正在努力寻找一种方法来使用 jqGrid 在获取其数据时发布到的 Controller 方法上的 ValidateAntiForgeryToken 属性。

网格是只读的。“数据类型”是“json”,“mtype”是“POST”。我尝试简单地将 __RequestVerificationToken 隐藏输入的值附加到返回到控制器的数据中,但这不起作用;该网站只是抛出一个丢失的防伪令牌异常。

我注意到,当想要将 json 数据的 $.ajax 发布到 Controller 方法时,可以在“headers”参数中传递 __RequestVerificationToken。虽然 jqGrid 在后台进行 $.ajax 调用,但不幸的是它没有 headers 参数。

我在 SO 上找到了示例,其中可以通过 editData 参数传递令牌(例如:JQGrid 能够通过主 CRUD 控件传递 ValidateAntiForgeryToken?),但我的网格是只读的,无论如何我都想当用户输入搜索条件然后单击按钮填充网格时强制执行令牌。

填充 jqgrid 时有什么方法可以使用 ValidateAntiForgeryToken 吗?

标签: asp.net-mvcjqgrid

解决方案


您可以包含具有定义为以下函数的属性的postData参数:__RequestVerificationToken

postData: {
    __RequestVerificationToken: function () {
        return jQuery("input[name=__RequestVerificationToken]").val();
    }
}

它将__RequestVerificationToken在填充网格期间向发送到服务器的所有请求添加参数。


推荐阅读