Работа с ошибками – это обычный фактор, с которым вы можете столкнуться при разработке любого приложения, независимо от того, какой язык вы использовали для разработки. Asp.Net Core, являясь одним из часто используемых фреймворков во многих компаниях, занимающихся веб-разработкой, обеспечивает потрясающую поддержку стратегий обработки ошибок.
Прежде чем погрузиться в основную часть темы, настоятельно рекомендуется иметь базовое понимание таких понятий, как C#, программирование на Asp.Net Core, концепции ООП, обработка исключений, try, catch, throw, finally и т.д.
Теперь давайте обсудим несколько подходов, связанных с обработкой ошибок в Asp.Net Core 3.1.
- Страница исключений разработчика
- Страница обработчика исключений
- Доступ к исключению
- Использовать страницы кодов состояния
- Использование страниц кода состояния со строкой формата
- Важные моменты, которые следует учитывать при обработке исключений
- Хотите нанять разработчика .NET Core? Свяжитесь сейчас.
- Обработка ошибок в блоке Try-catch
- Пользовательское промежуточное ПО для обработки ошибок
- Механизм обработки исключений при запуске
- Страница ошибок базы данных
- Фильтры исключений
- Заключение
Страница исключений разработчика
Очень важно получать уведомления на экране об исключениях запроса, возникающих при реализации веб-приложения. Поэтому, чтобы включить страницу при запуске приложения в среде разработки (одна из переменных среды, используемых для определения среды выполнения), необходимо добавить приведенный ниже код в метод Startup.Configure.
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Error");
app.UseHsts();
}
Эта страница исключений будет содержать важную информацию, связанную с исключениями и запросами, такую как: Cookies, параметры QueryString, если доступны, заголовки, трассировка стека.
Читать далее: Выполнение глобализации и локализации с помощью файла ресурсов в .net Core
Страница обработчика исключений
Чтобы настроить пользовательскую страницу обработки ошибок для производственной среды, вы можете использовать обработку исключений в случае, если вы нацелены на Middleware. Это промежуточное ПО выполняет следующие операции:
- Перехватывает исключение и записывает его в журнал.
- Оно повторно выполняет запрос в альтернативном конвейере указанной страницы или контроллера.
Шаблон приложения Razor page предоставляет папкуPages, в которой находится страница Error с расширением .cshtml и класс ErrorModel под названием “PageModel Class”.
В то время как в приложении MVC шаблон проекта будет включать представление Error и метод действия Error. Вы можете заметить метод действия Error в приведенном ниже исходном коде.
[AllowAnonymous]
public IActionResultError()
{
return View(new ErrorViewModel
{
RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier
});
}
Важное замечание: Не рекомендуется использовать Http-атрибуты типа Httpget в методе обработчика ошибок, так как это может помешать некоторым запросам достичь метода. Поэтому лучше использовать Allow Anonymous, чтобы каждый пользователь, включая неаутентифицированных, мог видеть вид ошибки.
Доступ к исключению
Чтобы получить доступ к исключению, Microsoft включила интерфейс под названием IExceptionHandlerPathFeature. Его можно использовать для доступа к исходному пути запроса в контроллере обработчика ошибок или на странице.Например:
varexceptionHandlerPathFeature =HttpContext.Features.Get<iexceptionhandlerpathfeature>();
if (exceptionHandlerPathFeature?.Error is FileNotFoundException)
{
ExceptionMessage = "File error thrown";
}
if (exceptionHandlerPathFeature?.Path == "/index")
{
ExceptionMessage += " from home page";
}</iexceptionhandlerpathfeature>
Использовать страницы кодов состояния
Это предупреждение о том, что в приложении Asp.Net Core вы не можете найти страницы кода состояния по умолчанию, такие как 404-Not Found и т.д. Приложение возвращает код состояния с пустым телом ответа.
Мы можем использовать промежуточное ПО под названием UseStatusCodePages, чтобы отобразить страницы кода состояния для приложения.
Как обсуждалось выше, нам нужно вызвать UseStatusCodePages в методе Startup.Configure, как показано ниже, чтобы обработчики только текстового кода по умолчанию были включены и отображались.
app.UseStatusCodePages();
Вы можете увидеть текстовый вывод, отображаемый обработчиками по умолчанию, как показано ниже:
Status Code: 404; Not Found
Использование страниц кода состояния со строкой формата
Мы также можем настроить тип содержимого ответа и текст содержимого в соответствии с нашими потребностями. Это делается с помощью перегрузки метода UseStatusCodePages(), который принимает тип содержимого и формат строки.
Пример:
app.UseStatusCodePages("text/plain", "Status code page, status code: {0}");
Важные моменты, которые следует учитывать при обработке исключений
- Часто отличной идеей является включение чисто статического содержимого в страницы ошибок. Это может быть полезно при отбрасывании исключений на страницах обработки исключений.
- После отправки заголовков ответа приложение не может изменять коды состояния ответа.
- После отправки заголовков ответа не могут быть запущены страницы или обработчики исключений. Для этого может потребоваться прервать соединение.
- Приложение Asp.Net Core выполняется с реализацией HTTP-сервера в процессе. Этот сервер может обрабатывать несколько исключений.
- 500 – Внутренняя ошибка сервера: Этот ответ будет отправлен сервером, если он поймает исключение до того, как будут отправлены заголовки ответа.
- Если исключение будет поймано сервером сразу после отправки заголовков ответа, то сервер закроет соединение. Помните, что запросы обрабатываются сервером, а не приложением.
Кроме того, давайте рассмотрим некоторые важные темы, связанные с обработкой ошибок.
Хотите нанять разработчика .NET Core? Свяжитесь сейчас.
Обработка ошибок в блоке Try-catch
Обработка ошибок на уровне кода может осуществляться с помощью операторов блока Try-catch. Если говорить о правилах использования, то утверждение должно содержать блок try с одним или несколькими утверждениями блока catch, которые помогают в определении различных исключений. По сути, CLR обрабатывает исключение, перебирая блоки catch, когда утверждение выбрасывает исключение.
Пользовательское промежуточное ПО для обработки ошибок
Вы также можете обрабатывать ошибки, настраивая промежуточное ПО обработчика исключений и создавая пользовательские ответы при возникновении ошибок в конвейере промежуточного ПО. Посмотрите на изображение выше для детального обзора.
Механизм обработки исключений при запуске
Если при запуске приложения возникает какая-либо ошибка, то эти ошибки будут обрабатываться не кем иным, как самим хостинговым уровнем. Вы также можете настроить хост на захват деталей возникновения ошибки.
Страница ошибок базы данных
С помощью миграций фреймворка сущностей вы можете разрешать связанные с базой данных исключения, которые фиксируются с помощью Database Error Page Middleware. При возникновении ошибки отображается HTML-страница ответа, содержащая возможные действия по устранению ошибки.
Фильтры исключений
Приложения MVC обеспечивают потрясающую поддержку фильтров исключений для перехвата исключений. Эти фильтры могут быть настроены глобально или на основе действия или контроллера.
Заключение
Подводя итог, можно сказать, что это все, что необходимо знать об обработке ошибок в ASP.Net Core 3.1. Это будет очень полезно для разработчиков, потому что не существует такой среды разработки приложений, в которой нельзя было бы найти или столкнуться с ошибками.