jquery – AJAX Posting ValidateAntiForgeryToken without Form to MVC Action Method

前端之家收集整理的这篇文章主要介绍了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()数据.

猜你在找的jQuery相关文章