在 Aspnet 核心 3.0 中使用 ElmahCore 全局捕获异常?
Catch Exceptions Globally using ElmahCore in Aspnet core 3.0?
我正在使用 Aspnet core 3.0,并且我已经配置 ElmahCore 进行异常处理。然而,根据他们的文档,他们建议使用
捕获异常
public IActionResult Test()
{
HttpContext.RiseError(new InvalidOperationException("Test"));
...
}
如何配置 Elmahcore 以自动捕获和记录所有异常?或者每次我想捕获并记录异常时都必须写 HttpContext.RiseError
吗?
就像我是否必须为每个 ActionResult
放置 try catch
块并在我所有的 catch 块中调用 HttpContext.RiseError()
?
有没有一种方法可以在全局范围内使用 ElmahCore 配置捕获和记录异常?
根据@Fei-han 的建议和这个global error handling link,我可以在我的生产环境中全局记录异常。在 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 });
}
现在我所有的异常都被记录下来,我还显示了一个自定义的错误页面以响应异常。
我正在使用 Aspnet core 3.0,并且我已经配置 ElmahCore 进行异常处理。然而,根据他们的文档,他们建议使用
捕获异常public IActionResult Test()
{
HttpContext.RiseError(new InvalidOperationException("Test"));
...
}
如何配置 Elmahcore 以自动捕获和记录所有异常?或者每次我想捕获并记录异常时都必须写 HttpContext.RiseError
吗?
就像我是否必须为每个 ActionResult
放置 try catch
块并在我所有的 catch 块中调用 HttpContext.RiseError()
?
有没有一种方法可以在全局范围内使用 ElmahCore 配置捕获和记录异常?
根据@Fei-han 的建议和这个global error handling link,我可以在我的生产环境中全局记录异常。在 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 });
}
现在我所有的异常都被记录下来,我还显示了一个自定义的错误页面以响应异常。