Ajax Post 中的 AntiforgeryToken with JSON 对象 ASP.NET MVC



我在使用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");
}
});

你不需要在 POST 方法中字符串化你的数据,只需创建一个 json 对象:

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

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

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

最新更新