Сообщение Ajax на странице ASP .NET 2.2 Razor выдает ошибку 404

#asp.net-core #razor #asp.net-core-mvc

#asp.net-ядро #razor #asp.net-ядро-mvc #asp.net-core

Вопрос:

Кажется, я не могу заставить это работать с последней версией .NET Core 2.2 Razor. Я жестко закодировал URL-адрес, просто чтобы убедиться, что он правильный. Скрипт ajax находится внутри частичного представления, но я протестировал перемещение скрипта на главную страницу с тем же результатом 404.

 $.ajax({
    type: 'POST',
    url: 'https://localhost:44349/Admin/Catalog/Products/Edit?handler=Filteramp;id=1',
    success: function (data) {
        alert("success");
    },
    error: function (xhr, textStatus, error) {
        alert(xhr.statusText);
    }
});
  

И вот мой обработчик:

 public IActionResult OnPostFilter(int id)
        {
            return new JsonResult("test");
        }
  

Я отключил токен защиты от подделки при запуске, просто чтобы убедиться, что это не было причиной моей проблемы:

     services.AddMvc().AddRazorPagesOptions(o =>
    {
        o.Conventions.ConfigureFilter(new IgnoreAntiforgeryTokenAttribute());
    });
  

Комментарии:

1. Что Admin/Catalog/Products/Edit означает? Поделитесь с нами своей полной страницей razor и структурой проекта.

2. Это страница по адресу: Области > Администратор > Страницы > Каталог > Продукты > Edit.cshtml … Я могу перейти на страницу / Admin / Catalog /Products /Edit / 8, и это работает, но когда я пытаюсь опубликовать AJAX с помощью обработчика, я не могу заставить его работать. У меня есть еще один проект, который является более ранней версией .NET Core Razor, и он работает. Я считаю, что в 2.2 что-то изменилось, что вызывает мою проблему.

Ответ №1:

404 означает, что URL неверен.

Страницы Razor должны устанавливать RequestVerificationToken заголовок при отправке POST запроса:

Добавьте @Html.AntiForgeryToken() в свой вид, затем измените свой ajax следующим образом:

 $.ajax({
            type: 'POST',
            url: 'https://localhost:44349/Admin/Catalog/Products/Edit?handler=Filter',
            contentType: 'application/x-www-form-urlencoded',
            dataType:'json',
            data: {
                 id: 1                  
            },
            headers:
            {
                "RequestVerificationToken": $('input:hidden[name="__RequestVerificationToken"]').val()
            },
            success: function (data) {
                alert("success");
            },
            error: function (xhr, textStatus, error) {
                alert(xhr.statusText);
            }
        });
  

Комментарии:

1. Спасибо. В опубликованном мной коде не было AntiForgeryToken, потому что я отключил его при запуске. Я попытался добавить токен в заголовок, и я все еще получаю ошибку 400. Также было рекомендовано изменить имя заголовка на «XSRF-TOKEN», но это тоже не работает.

2. вы также можете отключить ее с помощью [ValidateAntiForgeryToken(Order = 1000)] learnrazorpages.com/security/request-verification