Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery 使用antiforgery令牌和json对象对mvc控制器进行的ajax post调用给出错误500_Jquery_Json_Ajax_Asp.net Mvc - Fatal编程技术网

Jquery 使用antiforgery令牌和json对象对mvc控制器进行的ajax post调用给出错误500

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

我试图通过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[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) }
});