Поймать исключения во всем мире, используя ElmahCore в As pnet core 3.0? - PullRequest
0 голосов
/ 29 января 2020

Я использую As pnet core 3.0 и настроил ElmahCore для обработки исключений. однако из своей документации они советуют перехватывать исключения, используя

public IActionResult Test() { HttpContext.RiseError(new InvalidOperationException("Test")); ... }

Как я могу настроить Elmahcore для автоматического перехвата и регистрации всех исключений? или мне нужно писать HttpContext.RiseError каждый раз, когда я хочу поймать и записать исключение?

Например. Должен ли я ставить блоки try catch для каждого ActionResult и вызывать HttpContext.RiseError() во всех моих блоках перехвата?

Есть ли способ настроить перехват и регистрацию исключений, использующих ElmahCore во всем мире?

1 Ответ

0 голосов
/ 30 января 2020

Исходя из предложения @ Фэй-хана и этой глобальной ссылки для обработки ошибок , я могу регистрировать исключения глобально в моей производственной среде. В файле Startup.cs я убедился, что у меня настроен ExceptionHandler, когда мое приложение работает в производственном режиме, например

Startup.cs

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
  if (env.IsDevelopment())
  {
    app.UseDeveloperExceptionPage();
    app.UseDatabaseErrorPage();
  }
  else
  {
    app.UseExceptionHandler("/Home/Error");  
    app.UseHsts();
  }

  app.UseElmah();

  //Other configurations
}

. возникла исключительная ситуация, она вызовет метод действия ошибки контроллера дома

контроллер дома

    using Microsoft.AspNetCore.Diagnostics;
    public IActionResult Error()
    {
        var exceptionFeature = HttpContext.Features.Get<IExceptionHandlerPathFeature>();

        if (exceptionFeature != null)
        {
            // Get the exception that occurred
            Exception exceptionThatOccurred = exceptionFeature.Error;
            //log exception using ElmahCore
            HttpContext.RiseError(exceptionThatOccurred);
        }

        //Return custom error page (I have modified the default html of
        //Shared>Error.cshtml view and showed my custom error page)
        return View(new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier });
    }

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

...