AJAX POST-запрос не затрагивает метод Controller - PullRequest
0 голосов
/ 15 апреля 2019

Мой код хорошо работает для метода GET. Но в случае POST действие не вызывает

Я пробовал этот asp.net MVC с SQL Server

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 Ответ

1 голос
/ 15 апреля 2019

Ваш код 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]

Вы можете выполнить отладку, подключив отладчик к контроллеру, и вы сможетесм. ошибку, вызванную маркером защиты от подделки.

...