控制器中的错误处理
Error handling in the controller
我有这两个控制器操作
#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 生产模式时,视觉上使用了 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?}");
});
}
有什么想法吗?
获取异常详情,您只需要:
var ex = HttpContext.Features.Get<IExceptionHandlerFeature>();
我们可以使用下面这行代码
var feature = HttpContext.Features.Get<IExceptionHandlerFeature>();
var error = feature?.Error;
_logger.LogError("Oops!", error);
return View("~/Views/Shared/Error.cshtml", error);
你能参考下面的link了解更多详情吗
我有这两个控制器操作
#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 生产模式时,视觉上使用了 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?}");
});
}
有什么想法吗?
获取异常详情,您只需要:
var ex = HttpContext.Features.Get<IExceptionHandlerFeature>();
我们可以使用下面这行代码
var feature = HttpContext.Features.Get<IExceptionHandlerFeature>();
var error = feature?.Error;
_logger.LogError("Oops!", error);
return View("~/Views/Shared/Error.cshtml", error);
你能参考下面的link了解更多详情吗