У меня есть эти два действия контроллера
# 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);
}
У меня есть два вопроса
- Когда я нахожусь в режиме отладки VS, используется app.UseDeveloperExceptionPage (), и поэтому контроллер ошибок не вызывается (это хорошо для среды разработки).
- Когда я нахожусь в режиме VS Production, визуально используется app.UseDeveloperExceptionPage (), но я не знаю, как подтвердить, какая среда действительно используется (точки останова в startup.cs не работают в рабочем режиме.)
- Если как-то было вызвано действие «Ошибка», как я могу получить полное сообщение об исключении (для целей журнала)? По умолчанию внутри модели сохраняется только 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?}");
});
}
есть идеи?