Управление ошибками Asp.net Core

В предыдущих версиях Asp.net я использовался для создания BaseController, унаследованного от других контроллеров, и перехватывал общую ошибку и регистрировал каждую ошибку с помощью простого метода ведения журнала и передавал ExceptionContext filterContext.

Должен ли я сделать то же самое в Asp.net 5? Я вижу в Startup.cs, что есть оператор if/else, который в основном разделяет условие debug/live, с линией

app.UseErrorHandler("/Home/Error");     

для производственного приложения. Как я должен подключаться к процессу и регистрировать ошибки?

Спасибо

Ответы

Ответ 1

Ошибки обработки и регистрации в ASP.NET 5 включают несколько элементов.

Чтобы обработать ошибку в производственном сценарии и показать страницу с ошибкой, способ app.UseExceptionHandler() - это путь. Репо диагностика на ASP.NET GitHub org включает sample, который показывает это. В сценариях времени разработки, где вы хотите увидеть полную трассировку стека и другую диагностическую информацию, используйте app.UseDeveloperExceptionPage(), как показано в этом примере.

Если приложение использует MVC 6, тогда существует способ MVC для обработки ошибок, как и в более ранних версиях MVC. В MVC 6 фильтр (или сам контроллер, который также является фильтром) может обрабатывать/переопределять метод OnActionExecuted и проверять параметр ActionExecutedContext, чтобы попытаться обработать ошибку.

Когда дело доходит до регистрации, в ASP.NET 5 создается новая инфраструктура ведения журналов, которая сообщает большую информацию любому зарегистрированному ILogger. Шаблоны проектов по умолчанию в Visual Studio 2015 регистрируют некоторые регистраторы, которые регистрируют ошибки (и другие данные) в консоли и окно вывода отладки VS. Однако при работе в IIS или IIS Express нет консольного окна (пока!). Но если вы запустите из командной строки (используя dnx web), вы увидите ошибку. Или, конечно, вы можете зарегистрировать другой регистратор, который записывает в файл журнала или базу данных и видит там журналы.

Чтобы зарегистрировать пользовательский ILogger в веб-приложении:

  • Напишите регистратор, который реализует интерфейс ILogger. См. DNX-реализации для того, как это сделать.
  • Добавьте параметр типа ILoggerFactory к вашему приложению Startup class Configure.
  • В Configure метод Configure вызывается loggerFactory.AddProvider(<some provider>) и передается в экземпляр вашего регистратора.