【问题标题】:Use ValidateAntiForgeryToken with JQGrid in asp.net MVC?在 asp.net MVC 中使用 ValidateAntiForgeryToken 和 JQGrid?
【发布时间】:2019-01-26 16:35:40
【问题描述】:

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

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

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

我在 SO 上找到了示例,其中可以通过 editData 参数传递令牌(例如:JQGrid able to pass ValidateAntiForgeryToken through the main CRUD controls?),但我的网格是只读的,无论如何我想在用户输入搜索条件,然后单击一个按钮来填充网格。

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

【问题讨论】:

    标签: asp.net-mvc jqgrid


    【解决方案1】:

    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);
                }
            }
        });
    

    【讨论】:

      【解决方案2】:

      您可以将postData 参数与__RequestVerificationToken 属性一起定义为以下函数:

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

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

      【讨论】:

        猜你喜欢
        • 2015-11-24
        • 1970-01-01
        • 2012-09-22
        • 2020-05-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多