Jquery 使用antiforgery令牌和json对象对mvc控制器进行的ajax post调用给出错误500
我试图通过ajax调用发送antiforgery令牌和json对象 下面是我的ajax调用方法Jquery 使用antiforgery令牌和json对象对mvc控制器进行的ajax post调用给出错误500,jquery,json,ajax,asp.net-mvc,Jquery,Json,Ajax,Asp.net Mvc,我试图通过ajax调用发送antiforgery令牌和json对象 下面是我的ajax调用方法 $("button#submit-btn").on("click", function (e) { e.preventDefault(); //var valid = $("form#sh-post-form").valid(); var modell = { PlaceId: 1 }; var token = $('input[nam
$("button#submit-btn").on("click", function (e) {
e.preventDefault();
//var valid = $("form#sh-post-form").valid();
var modell = { PlaceId: 1 };
var token = $('input[name=__RequestVerificationToken]').val();
$.ajax({
contentType: 'application/json; charset=utf-8',
dataType: "json",
type: "POST",
url: "/Post/SaveSharePost",
data: { __RequestVerificationToken: token, model: JSON.stringify(modell) }
});
这是我的控制器
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult SaveSharePost(SharePostVM model, string retunrUrl = null)
{
if (!ModelState.IsValid)
return View(model);
return View(model);
}
当我尝试发送ajax调用时,它会给我内部错误500,错误消息说“所需的防伪表单字段\uuu RequestVerificationToken不存在”
我怎样才能修好它
谢谢大家您应该在您的模型中添加伪造令牌,如:
model.__RequestVerificationToken=token
及
data:{uuuuu RequestVerificationToken:token,PlaceId:1}
并删除contentType
选项(或者其data:JSON.stringify({uuuurequestverificationtoken:token,PlaceId:1}),
(不能混合内容类型)。但为什么不使用$('form').serialize()
序列化所有输入,包括令牌?因此基本上我不能发送对象和反欺诈令牌?我如何使用$('form').serialize()?当然可以(根据第一条注释-令牌只需要是对象的一部分)。和$('form').serialize();
序列化表单标记中的所有表单控件,包括令牌。@StephenMuecke um根据您的第一条评论,我需要发送模型对象而不是“PlaceId:1”。我知道对象将有更多变量!只需将\u RequestVerificationToken:token
作为对象的一部分。但是,为什么不使用.serialize()
?
$.ajax({
contentType: 'application/json; charset=utf-8',
dataType: "json",
type: "POST",
url: "/Post/SaveSharePost",
data: {model: JSON.stringify(modell) }
});