Как обрабатывать исключение AJAX в ASP.NET Ядро MVC и показать пользовательскую страницу ошибок?

#ajax #asp.net-core #model-view-controller #.net-5

#ajax #asp.net-ядро #модель-представление-контроллер #.net-5

Вопрос:

Я только начал работать с ASP.NET Ядро MVC и веб-разработки в целом, и я изо всех сил пытаюсь понять, как показать страницу с ошибкой из вызова AJAX.

Что я хотел бы сделать, так это показать пользовательскую страницу с сообщением об ошибке, если вызов Ajax завершается неудачно. Пока у меня есть следующий код, который приводит меня к моей странице 500, когда я создаю исключение в контроллере, но как мне заставить его отображать сообщение об исключениях на этой странице?

StartUp.cs промежуточное программное обеспечение:

         if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }
        else
        {
            app.UseStatusCodePagesWithReExecute("/Error/Error", "?Code={0}");
            // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
            app.UseHsts();
        }
 

Контроллер ошибок:

     public IActionResult Error(int? Code = null)
    {
        if (Code.HasValue)
        {
            if (Code.Value == 404 || Code.Value == 500)
            {
                var viewName = Code.ToString();
                return View(viewName);
            }
        }

        return View();
    }
 

Вызов AJAX:

 // Use ajax call to post to the controller with the data
$.ajax({
        type: "POST",
        url: "/Renewals/GenerateQuotes",
        data: { selectedContractIds: ids },
        success: function (response) {
                     // Show success and refresh the page
                     Toast.fire({
                                icon: 'success',
                                title: 'Quotes Generated'
                            }).then(function () {
                                location.reload();
                            });
        },
        error: function (xhr, status, error) {
               // Response message
               var response = xhr.responseText;
               window.location.href = '@Url.Action("Error", "Error")?Code='   xhr.status;
        }
})
 

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

1. обычно мы показываем ошибку для ajax-запроса в небольшой части страницы, например: <div> …, или через всплывающую подсказку в каком-то углу экрана… Зачем вам целая страница ошибок? Если вы хотите, чтобы в текущую страницу была встроена некоторая предопределенная пользовательская страница ошибок в формате rich HTML, вы можете вернуть этот частичный HTML-код в качестве ответа на запрос ajax, чтобы его можно было отобразить. Этот ответ можно получить через xhr.responseText .

2. Спасибо, я просто подумал, что было бы полезно увидеть ошибку для внутреннего приложения. Я рассмотрю этот вариант.