Ajax POST 请求未命中控制器方法

Ajax POST Request not hitting the Controller method

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

我已经用 SQL 服务器试过这个 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 方法未调用

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

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

并且通过向 post 添加另一行代码到 jQuery post 请求中的防伪令牌。

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]

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