ASP.NET Global Exception Handling | Глобальная Обработка Исключений

Sdílet
Vložit
  • čas přidán 9. 07. 2024
  • В этом видео мы поговорим о глобальной обработке исключений в ASP.NET Core. Исключения (Exceptions) являются неотъемлемой частью абсолютно любого приложения. Ваша кодовая база может быть идеальной и всё равно там будут исключения. Обычно это происходит из-за внешних факторов, таких как проблемы с сетью, ошибок ввода-вывода и так далее. Если эти исключения не обрабатываются должным образом в приложении, это может привести к завершению работы всего приложения и даже потере данных. В ролике мы поговорим о том, как организовать централизованную обработку исключений. Будет интересно 🙂
    Исходный код проекта на GitHub: github.com/codaza/StaffService
    Telegram канал: t.me/codaza
    На кофе ☕️: pay.cloudtips.ru/p/179d0532
    Patreon: / codaza
    Boosty: boosty.to/codaza
    0:00 - Начало
    1:19 - В чём состоит проблема?
    3:22 - Решение: Global Exceptions Handling
    5:22 - Live example
    7:13 - Пример: Создаём проект в Visual Studio 2022 (.NET6)
    #aspnet #csharp #netcore #net6 #codaza

Komentáře • 51

  • @codaza-channel
    @codaza-channel  Před 2 lety +6

    Удобная навигация по видео :)
    0:00 - Начало
    1:19 - В чём состоит проблема?
    3:22 - Решение: Global Exceptions Handling
    5:22 - Live example
    7:13 - Пример: Создаём проект в Visual Studio 2022 (.NET6)

  • @firemanhood1526
    @firemanhood1526 Před 2 lety +14

    Было бы круто еще:
    1) Как работать с http, формирование запросов, куки, хедеры и т.д
    2) Работа с кешем
    3) Аутентификация и авторизация, роли
    4) Горячие клавиши и фишки в IDE

  • @user-cn1kp4bp7i
    @user-cn1kp4bp7i Před 2 lety +6

    Невероятно потрясён качеством контента. Автору моё почтение. Желаю всех благ в развитии канала!

  • @chinchilla898
    @chinchilla898 Před 2 lety +4

    Большое спасибо за качественную информацию! Очень помогает в профессиональном плане!

  • @marksreider7645
    @marksreider7645 Před 2 lety +1

    Очень познавательное видео! С разъяснением миллионом нюансов, спасибо за труды сенсей!

  • @anonim6364
    @anonim6364 Před rokem +2

    Видос очень крутой, понятно всё с полу слова

  • @user-we6wp1ky7f
    @user-we6wp1ky7f Před 2 lety +1

    Очень понятно, напишу глупо но такая подача материала интереснее чем читать msdn)

  • @DENDYTWOO
    @DENDYTWOO Před 2 lety +2

    Спасибо за видео!

  • @islommakhsudov5866
    @islommakhsudov5866 Před 2 lety +1

    Спасибо большое за ваш труд!!!

  • @firemanhood1526
    @firemanhood1526 Před 2 lety +1

    Лучший👍💯 ждем еще инфу

  • @winstochurgle9133
    @winstochurgle9133 Před 2 lety +1

    Лучший, просто лучший.

  • @alexwexov4298
    @alexwexov4298 Před 2 lety +2

    Great !

  • @suiqrim
    @suiqrim Před 2 lety +1

    Шикарное видео и очень ценное. Все что надо есть. Правда ближе к концу я перестал понимать что за методы описываются, но это дефолт))

  • @exAlexey
    @exAlexey Před rokem

    Спасибо за ролик! Хотелось бы увидеть видео сравнение всех способов обработки исключений, в том числе и для mvc проекта. Допустим я использую реализацию для IExceptionFilter интерфейса.

  • @Leonidn1972
    @Leonidn1972 Před rokem +1

    Thanks a lot. Content super usefully.

  • @haruthovsepyan5347
    @haruthovsepyan5347 Před 2 lety +1

    Cool !!!

  • @syrymjoli
    @syrymjoli Před rokem +1

    Я Сырым подписка +, спасибо автору

    • @codaza-channel
      @codaza-channel  Před rokem

      Привет Сырым! Добро пожаловать на борт! 🙂

    • @syrymjoli
      @syrymjoli Před rokem

      @@codaza-channel 🤓🤓🤓

  • @clutchmeisteryo9831
    @clutchmeisteryo9831 Před rokem +1

    А зачем в ErrorDto есть поле StatusCode которое по сути дублирует HttpStatuscode, который в свою очередь внешняя система и так может получить из ответа?

  • @inskips
    @inskips Před rokem

    Приветствую. Склонировал ваш репозиторий, появился вопрос. При отправке запроса IDE тормозит на исключении и только потом проходит по пайплайну и обрабатывает исключение. Подскажите как это исправить?

  • @777homosapien
    @777homosapien Před 2 lety +2

    Здравствуйте! Спасибо за видео, подскажите как Вы относитесь к обработки ошибок через var contextFeature = context.Features.Get(); После проверяем его на null и если фича содержит информацию по ошибкам то можно добавить соответствующие статусы с использованием swith
    context.Response.StatusCode = contextFeature.Error switch
    {
    _ => StatusCodes.Status500InternalServerError
    };
    Я его использую в своих проектах. Подскажите какой способ лучше? Спасибо!

    • @codaza-channel
      @codaza-channel  Před 2 lety

      Здравствуйте!
      Да, это еще один распространённый способ обработки исключений. Лично для меня, использование middleware проще. Возможно, существуют тонкие отличия в применении этих способов, но мне не приходилось сталкиваться с ними в решении реальных бизнес-задач. Если вам удобно пользоваться IExceptionHandlerFeature или в вашей команде так принято, то я не вижу в этом проблемы.
      Если вам удастся узнать о важных отличиях, буду рад если поделитесь информацией 😊

  • @juliusmalkov9620
    @juliusmalkov9620 Před 2 lety +1

    а в response в .net core 3.1 так же можно вставить дто?

    • @codaza-channel
      @codaza-channel  Před 2 lety

      Нет, метод расширения WriteAsJson работает для версий ASP.NET Core 6.0 и ASP.NET Core 5.0.

  • @PoWeRMeH21
    @PoWeRMeH21 Před rokem

    Хорошее видео) но как ловить эксепш если юзер не авторизован или например не имеет достаточно прав? Даже если в пайплайне встроить самым первым данный middleware ошибку он не перехватывает(

    • @PoWeRMeH21
      @PoWeRMeH21 Před rokem

      UPD: разобрался. Забыл что добавил кастомный AuthorizationHandler, и если в нем не выкидывать ошибку а просто фиксировать context.Fail(); то и try catch ничего не поймает

  • @shakotkopavlo
    @shakotkopavlo Před 2 lety

    Почему метод UseMiddleware в пейплайн с хендлером вставляеться в самое начало? Почему не после авторизации? Или в конец? Или нету разницы вообще?

    • @user-yy1ju5ht2o
      @user-yy1ju5ht2o Před 2 lety +1

      Потому что мы хотим отлавливать исключения, которые могут произойти в любом middleware выше по стеку вызова

  • @user-pq7dj1ny4h
    @user-pq7dj1ny4h Před 2 lety +1

    А где использование переопределенного toString()?

    • @codaza-channel
      @codaza-channel  Před 2 lety +5

      Внимательный зритель на вес золота 🙂 Конвертация в json не требуются, так как этим занимается метод WriteAsJsonAsync() в HttpResponse. В видео я сделал это излишне. В исходниках проекта на GitHub я убрал лишние конвертации. Спасибо за внимательность! 👍

  • @zergzerg4844
    @zergzerg4844 Před 2 lety

    не ставил себе студию 2022, разрабы что, избавились от класса startup в шаблонах? И почему класс Program так странно выглядит, без объявления класса и код не в блоке, какие-то странные нововведения?

    • @user-jd6cn4wr9c
      @user-jd6cn4wr9c Před 2 lety

      .NET 6 поищи, какие нововведения в нём, там есть ответы на твои вопросы, и нововведения эти совсем не странные, а логичные, удобные и понятные.

    • @zergzerg4844
      @zergzerg4844 Před 2 lety

      @@user-jd6cn4wr9c ок, понял

  • @anesens8905
    @anesens8905 Před 2 lety

    Автор, а вы случаем не переводили Пиратов карибского моря ? Первых 3 части

  • @DF-ov1zm
    @DF-ov1zm Před rokem

    Ребятушки, пожалуйста НИКОГДА так не делайте как автор в этом видосе, НИКОГДА 1) не отключайте защиту от нуллреференсов (она заставляет вас учиться писать код правильно, понимать что вы пишите и защищает от 99% косяков, в которые вы без неё обязательно вляпаетесь) и 2) не обрабатывайте исключения не явным образом в миддлвэйре (вы так никонда не научитесь работать с ошибками, обработка исключений - НАМНОГО сложнее, чем просто логирование.. и для логирование исключений есть специальные инструменты и стандартные подходы, которые не имеют ничего общего с глобальной обработкой, вы легко можете потерять работу и получить волчий билет на всю жизнь, если не правильно обработаете всего одно, но очень важное, исключение.. а вы обязательно его не обработаете, если будете всегда ловить их глобально и не научитесь работать с ними правильно). Вы сами себя закопаете в яму говнокодерства в самом начале пути и выбраться из этой ямы потом будет очень очень сложно. Это самые вредные советы, какие только можно дать начинающим разработчикам. Я вообще сначала подумал, шо автор троллит просто, но нет, он серьёзно..

    • @rar24
      @rar24 Před 11 měsíci

      пример правильной обработки ошибок можно?

    • @DF-ov1zm
      @DF-ov1zm Před 11 měsíci

      @@rar24 пример правильной обработки ошибок - это как минимум 1) определить точечно где и что может пойти не так и чем это грозит (в том числе проверить какие эксепшен могут кидать те методы, которыми вы пользуетесь и в каких ситуациях) 2) спланировать поведение системы в случае если что то пошло не так: откатить ранее сделанные изменения если возможно, заинфорсить политику ретрая (или вырубить серкут брейкер) если возможно 3) "упасть" как можно скорее (для чего и существует те самые эксепшены), что бы не допустить усугубления ситуации 4) сообщить в систему мониторинга о своём состоянии. Все это требует точечного подхода и понимания: как работает ваше приложение, что может пойти не так, что делать если что то пошло не так, в каких случаях ошибки можно игнорировать, а в каких нельзя. В случае каких то серьёзных ошибок у вас обязательно должны быть данные о том, что произошло и почему. Что бы можно было 1) постфактум исправить состояние, которое возникло по ошибке 2) проанализировать что пошло не так (Root cause analysis, RCA) и что сделать, что бы это не повторилось. Эксепшен нужно обязательно уметь отлавливать и вообще правильно с ними работать, это чрезвычайно полезный инструмент в любом рекавери и RCA.

    • @sanchous177
      @sanchous177 Před 8 měsíci

      Про нуллабле контекст я согласен с вами, его ни в коем случае не надо отключать, так ide будет вас заставлять писать проверки на null.
      А вот по поводу глобальной обработки исключений, вроде в аспнет 7 исключения в запросах не крашат приложение, а логгируются по дефолту. Или я ошибаюсь?

    • @DF-ov1zm
      @DF-ov1zm Před 8 měsíci

      @@sanchous177 дело же не в крашах, это как раз меньшая из проблем.. дело в навыках обработки ошибок

    • @user-ow1sd5mt6y
      @user-ow1sd5mt6y Před 2 měsíci

      ​@@DF-ov1zmГде можно почитать о правильной обработке ошибок? Как насчёт функциональной обработки с помощью result pattern?

  • @syrymjoli
    @syrymjoli Před rokem

    #Codazastyle видео будет про что такое миделворе ?🤯

    • @codaza-channel
      @codaza-channel  Před rokem +1

      В этом ролике мы уже посмотрели на яркий пример использования middleware. Буду иметь ввиду, что хотелось бы поговорить о middleware отдельно.

  • @messirekhagen
    @messirekhagen Před 2 lety

    ля, я уснул(

  • @user-gt8cy2ji2z
    @user-gt8cy2ji2z Před 2 lety

    Кто такой этот Roberto?

    • @codaza-channel
      @codaza-channel  Před 2 lety +2

      О Roberto очень мало информации. Известно лишь что он весьма ценный сотрудник для организации.

  • @IvaNFallout
    @IvaNFallout Před rokem

    Переопределяли ToString() для класса ErrorDto, но так и не воспользовались им 🥹

    • @codaza-channel
      @codaza-channel  Před rokem

      Да, вы правы. В комментариях ниже уже указывали на это. Повторюсь: Конвертация в json не требуются, так как этим занимается метод WriteAsJsonAsync() в HttpResponse. В видео я сделал это излишне. В исходниках проекта на GitHub я убрал лишние конвертации. Спасибо за внимательность! 👍