【问题标题】:antiforgerytoken in ajax post with json object ASP.NET MVC [duplicate]带有json对象ASP.NET MVC的ajax帖子中的antiforgerytoken [重复]
【发布时间】:2018-10-29 04:06:17
【问题描述】:

我在使用 antiforgerytoken 将转换后的 json 对象发布到控制器时遇到问题。传递的参数questionnaireViewModel 为空。 我已经尝试添加到 ajax:

contentType: "application/json",

headers: { '__RequestVerificationToken': token },

但什么都没有改变。你能帮帮我吗?

@using (Html.BeginForm("PostQuestionnaire", "Home", FormMethod.Post, new { id = "__AjaxAntiForgeryQuestionnaireForm" }))
{
    @Html.AntiForgeryToken()
}

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult PostQuestionnaire(QuestionnaireViewModel questionnaireViewModel)
    { ... }

$('#submitBtn').on('click', function () {

   var questionnaireVM = JSON.stringify({
    'questionnaireViewModel': {
        'QuestionnaireId': $('#QuestionnaireId').val(),
        'Revision': $('#Revision').val(),
        'IPAddress': '',        
    }
});

var form = $('#__AjaxAntiForgeryQuestionnaireForm');
var token = $('input[name="__RequestVerificationToken"]', form).val();

$.ajax({
    type: "POST",
    url: "./PostQuestionnaire",
    data: { 
            __RequestVerificationToken: token, 
            questionnaireVM 
        },
    success: function (result) {
        if (result.success) {
            console.log("success");

        } else {
            console.log("fail");
        }
    },
    error: function (request) {
            console.log("error");
    }
});

【问题讨论】:

    标签: .net json ajax antiforgerytoken


    【解决方案1】:

    您不需要在 POST 方法中对数据进行字符串化,只需制作一个 json 对象:

    let d = {
        'QuestionnaireId': $('#QuestionnaireId').val(),
        'Revision': $('#Revision').val(),
        'IPAddress': '',        
    }
    

    并将 Ajax 调用中的数据部分替换为以下代码:

    data: { 
            __RequestVerificationToken: token, 
            questionnaireViewModel: d
        },
    

    【讨论】:

    • 所以请将其标记为答案
    猜你喜欢
    • 2010-11-23
    • 1970-01-01
    • 2017-01-03
    • 2012-12-03
    • 2013-01-06
    • 1970-01-01
    • 2018-06-11
    相关资源
    最近更新 更多