我在使用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
},