Обработка ошибок в контроллере - PullRequest
0 голосов
/ 02 июля 2018

У меня есть эти два действия контроллера

# 1 будет выбрасывать деление на ноль исключения

public IActionResult About()
{
     ViewData["Message"] = "Your application description page.";
     var x = 0;
     var y = 5 / x;
     return View();
}

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

public IActionResult Error()
{
    var model = new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier };
    return View(model);
}

У меня есть два вопроса

  1. Когда я нахожусь в режиме отладки VS, используется app.UseDeveloperExceptionPage (), и поэтому контроллер ошибок не вызывается (это хорошо для среды разработки).
  2. Когда я нахожусь в режиме VS Production, визуально используется app.UseDeveloperExceptionPage (), но я не знаю, как подтвердить, какая среда действительно используется (точки останова в startup.cs не работают в рабочем режиме.)
  3. Если как-то было вызвано действие «Ошибка», как я могу получить полное сообщение об исключении (для целей журнала)? По умолчанию внутри модели сохраняется только RequestId.

Я не хочу использовать синтаксис try catch в каждом действии или атрибут фильтра повторного действия, потому что я хочу, чтобы обработчик общих исключений был реализован так, как я это делал в global.asax до базовой версии.

Мой startup.cs очень прост.

// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{

    if (env.IsDevelopment())
    {
        app.UseBrowserLink();
        app.UseDeveloperExceptionPage();
    }
    else
    {
        app.UseExceptionHandler("/Home/Error");
    }

    app.UseStaticFiles();
    app.UseStatusCodePages();

    app.UseMvc(routes =>
    {
        routes.MapRoute(
            name: "default",
            template: "{controller=Home}/{action=Index}/{id?}");
    });
}

есть идеи?

Ответы [ 2 ]

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

мы можем использовать следующую строку кода

 var feature = HttpContext.Features.Get<IExceptionHandlerFeature>();
           var error = feature?.Error;
            _logger.LogError("Oops!", error);
            return View("~/Views/Shared/Error.cshtml", error);

Можете ли вы обратиться по ссылке ниже для получения более подробной информации Нажмите

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

Чтобы получить информацию об исключении, вам просто нужно:

var ex = HttpContext.Features.Get<IExceptionHandlerFeature>();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...