使用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");
}
});
答案 0 :(得分:1)
您不需要在POST方法中对数据进行字符串化,只需创建一个json对象:
let d = {
'QuestionnaireId': $('#QuestionnaireId').val(),
'Revision': $('#Revision').val(),
'IPAddress': '',
}
并使用以下代码替换Ajax调用中的数据部分:
data: {
__RequestVerificationToken: token,
questionnaireViewModel: d
},