Ajax POST请求未达到Controller方法

时间:2019-04-15 06:52:06

标签: c# ajax post model-view-controller jsgrid

我的代码适用于GET方法。但是在POST的情况下,该操作似乎没有调用

我已经在SQL Server中尝试过此asp.net MVC

insertItem: function (item) {
                        console.log("items",item);
                        var d = $j.Deferred();
                        $j.ajax({
                            type: "POST",
                            //data: {},
                            //data: { Email: item.Email, FirstName: item.FirstName },
                            data: item,
                            url: '@Url.Action("Create", "User")',
                            //contentType: 'application/json; charset=utf-8',
                            //dataType: "json",
                        }).done(function (response) {
                            console.log("response", response.response)
                            d.resolve(response.response);
                        });

                        return d.promise();
                    }

如果我将类型指定为GET,则相同的代码可在控制器中使用GET方法正常运行,但POST方法无效

这是我的控制人

[HttpPost]
        [ValidateAntiForgeryToken]
        public ActionResult Create(UserViewModel item)
        {
        }

POST方法不会调用

1 个答案:

答案 0 :(得分:1)

您的jQuery代码看起来不完整,因为您的.NET代码具有防伪请求验证,但是您没有在发布请求中发送伪造令牌。

如果您使用某种形式,则可以通过此方法@Html.AntiForgeryToken()

添加伪造令牌

并添加另一行代码以将防伪令牌发布到jQuery发布请求中。

insertItem: function (item) {
                        console.log("items",item);
                        var d = $j.Deferred();
                        var token = $('input[name="__RequestVerificationToken"]').val();
                        $j.ajax({
                            type: "POST",
                            //data: {},
                            //data: { Email: item.Email, FirstName: item.FirstName },
                            data: {
                                    item:item,
                                    __RequestVerificationToken: token, 
                            },
                            url: '@Url.Action("Create", "User")',
                            //contentType: 'application/json; charset=utf-8',
                            //dataType: "json",
                        }).done(function (response) {
                            console.log("response", response.response)
                            d.resolve(response.response);
                        });

                        return d.promise();
                    }

如果您只是想测试一下它是否是由于防伪令牌引起的,那么只需从.Net控制器中删除这一行代码(您的代码)即可。

[HttpPost]
[ValidateAntiForgeryToken]

您可以通过在控制器上附加调试器来进行调试,您将能够看到由于防伪令牌导致的错误。