jquery - AJAX 将不带表单的 ValidateAntiForgeryToken 发布到 MVC 操作方法

标签 jquery asp.net-mvc json

我一直在寻找如何在 SO 上执行此操作的示例,据我所知,我已经尝试了所有我能找到的示例,但到目前为止没有成功。我已经尝试根据我的场景更改一些实现,但到目前为止也失败了。

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

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

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

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

这一切都按预期工作,我得到了一个防伪 token 。我的实际发布代码是:

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 参数名称在那里,并且 token 值也存在.

我现在对这一切感到非常困惑,无法找到发送 token 以便调用我的 MVC 操作的正确方法。如果我删除 ValidateAntiForgeryToken 属性并使用 JSON.stringify(myPage.contextsArrays); 作为数据,则 json 看起来正确(未编码)并且映射正常。

如何在没有表单的情况下正确发布此 token ?

最佳答案

Cardboard 开发商再次出击。

我所要做的就是删除:

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

通过这样做(这会改变发出的 post 请求的类型),让实际数据属性的 Json 内容正确绑定(bind)到您的 T 模型类型不要 JSON.stringify() 数据。

关于jquery - AJAX 将不带表单的 ValidateAntiForgeryToken 发布到 MVC 操作方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17857850/

相关文章:

javascript - jquery.nav.js 一点击后不起作用

jquery - 单击使用 jquery 将类添加到 aspx linkbutton

asp.net-mvc - 我可以在 Web 应用程序中获取工作进程的进程 ID 吗?

javascript - 我想在我的元素中引用“datatable.net”中的表

javascript - 如何遍历对象的所有属性并删除特定属性AngularJS

MySQL在数组中按键搜索json值

javascript - 从不同文件将 html 加载到 div 后如何使用 javascript 编辑标签?

javascript - TinyMCE 获取所有编辑器和设置

c# - 如何交叉多个IEnumerable?

.net - 我可以让 JavaScriptSerializer 分层序列化 LINQ 结果吗?