ASP.NET MVC SqlException не перенаправляет на страницу ошибки - PullRequest
0 голосов
/ 05 июля 2018

Я ожидаю, что если произойдет ошибка (например, я ввел неправильный адрес страницы сайта), пользователь будет перенаправлен на соответствующую страницу ошибки (в данном случае - 404). Но для типа ошибки 500 (Внутренняя ошибка сервера) я вижу перенаправление в журнале VS, но пользователь остается на той же странице, которая вызвала ошибку.

Вот как работает моя веб-страница:

  1. Когда пользователь открывает веб-страницу, выполняется метод ActionResult контроллера и возвращается View();

  2. View визуализирует HTML-код, а затем запускает jQuery ajax, который выполняет другой метод контроллера с JsonResult

  3. В этом методе контроллера SQL-запрос подготавливается и выполняется методом статического класса, который использует SqlClient

  4. В методе статического класса я получаю SqlException (например, я пытаюсь выполнить несуществующую процедуру):

    Исключение типа 'System.Data.SqlClient.SqlException' произошло в System.Data.dll, но не было обработано в коде пользователя

    Дополнительная информация: Не удается найти сохраненный продукт "dbo.NonExistingProcedureName".

Я ожидал, что в этом случае пользователь будет перенаправлен на страницу 500 ошибок, и я вижу перенаправление в журнале VS:

Тип события Время события Длительность потока Подробное описание

ASP.NET (активирован)
Перенаправление на «/ error / serverError? Aspxerrorpath = / dash / jObject» 11.16s [24128]
Рабочая нить
...

ASP.NET GET "/ error / serverError" 11.16s [24128] Рабочая нить

... но перенаправление фактически не завершено, и пользователь по-прежнему просматривает страницу, которая вызвала ошибку.

Итак, почему перенаправление на страницу ошибки не работает должным образом?

1 Ответ

0 голосов
/ 05 июля 2018

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

Лучше всего перехватить ошибку в вашем обратном вызове ajax error или statusCode, а затем перенаправить на соответствующую страницу ошибки через javascript. Что-то вроде ...

$.ajax({
statusCode: {
    500: function() {
      alert("fudged up");
    }
  }
});
...