因此,我刚刚遵循了本教程: https://code-maze.com/global-error-handling-aspnetcore/ 一切似乎都工作正常,但涉及服务时,它不会处理任何异常,因此会关闭我的应用程序。关于调试,这没什么大不了的,但是我需要它在实际环境中工作,而且我想捕获每个异常,以免关闭应用程序。
StatusService.cs
public async void Add(List<Status> status)
{
throw new Exception();
await this.status.InsertManyAsync(status);
}
StatusController.cs
[HttpPost("add")]
public IActionResult Add( [FromBody] List<Status> status)
{
if(status.Count > 0)
{
try
{
statusService.Add(status);
return Ok();
}
catch (Exception ex) { throw ex; }
}
return BadRequest("Array must not be empty");
}
因此,如果在StatusController处引发异常,则可以正常工作,但是当我调用statusServices并引发该异常时,我的应用程序可以正常工作。 是否有一种解决方法可以将异常引发到Controllers上,或者让我的中间件捕获到每个类中?
答案 0 :(得分:0)
您可以使用过滤器来捕获所有未处理的异常。
public class CustomExceptionFilterAttribute : ExceptionFilterAttribute
{
private readonly ILoggerFactory _loggerFactory;
public CustomExceptionFilterAttribute(ILoggerFactory loggerFactory)
{
_loggerFactory = loggerFactory;
}
public override void OnException(ExceptionContext context)
{
var logger = _loggerFactory.CreateLogger(context.ActionDescriptor.DisplayName);
logger.LogError(context.Exception, "Action Error");
var result = new ObjectResult(null)
{
StatusCode = StatusCodes.Status500InternalServerError
};
context.Result = result;
}
}
也不要以这种方式抛出异常:
catch (Exception ex) { throw ex; }
因为您丢失了部分错误堆栈跟踪。只是写
catch (Exception) { throw; }