微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

jquery – AJAX Posting ValidateAntiForgeryToken without Form to MVC Action Method

我一直在看一下在SO上如何做到这一点的例子,据我所知,迄今为止我已经尝试了所有可以找到的例子,没有成功.我已经尝试将一些实现改为我的场景,但是迄今为止还是失败了.

我在我的页面上有这个_layout.cshtml,所以我总是有一个令牌可用:

<form id="__AjaxAntiForgeryForm" action="#" method="post"> @Html.AntiForgeryToken()</form>

我的JavaScript utils文件中也有这个方法

AddAntiForgeryToken = function (data) {
    data.__RequestVerificationToken = $('#__AjaxAntiForgeryForm input[name=__RequestVerificationToken]').val();
    return data;
};

这都是按预期工作,我得到一个反伪造的令牌.我的实际贴子是:

myPage.saveData = function() {
    var saveUrl = '/exercises/PostData';

    var myData = JSON.stringify(myPage.contextsArrays);

    $.ajax({
        type: 'POST',async: false,url: saveUrl,data: AddAntiForgeryToken({ myResults: myData }),success: function () {
            alert('saved');
        },dataType: 'json',contentType: "application/json; charset=utf-8"
    });
};

我的动作方法如下所示:

[HttpPost,ValidateAntiForgeryToken,JsonExceptionFilter]
    public JsonResult PostData(List<ResultsDc> myResults)
    {
        return Json(_apiclient.SubmitResults(myResults));
    }

我一直在尝试使用我一直在尝试的各种实现方式,并且响应始终如一:

{"errorMessage":"The required anti-forgery form field \"__RequestVerificationToken\" is not present."}

我不会发布一个表单,它只是一个数据数组,但检查实际发布的数据Json看起来不正确(它全部编码),但__RequestVerificationToken参数名称在那里,并且令牌值也存在.

我现在很困惑所有这一切,找不到正确的方式发送令牌,以便我的MVC动作被调用.如果我删除ValidateAntiForgeryToken属性并具有JSON.stringify(myPage.contextsArrays);作为数据json看起来正确(未编码),它映射正确.

如何在没有表单的情况下正确地贴出该标记

解决方法

纸板开发商再次罢工.

我所要做的只是删除

contentType: "application/json; charset=utf-8"

并且通过这样做(这改变了发布请求的种类),以获得实际数据属性的Json内容正确绑定到您的T模型类型DO NOT JSON.stringify()数据.

原文地址:https://www.jb51.cc/jquery/180429.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐