.NetCore过滤器之异常处理
1.过滤器介绍
Net Core中有各种Filter,分别是AuthorizationFilter、ResourceFilter、ExceptionFilter、ActionFilter、ResultFilter。可以把他们看作是.Net Core自带的AOP的扩展封装。
这里我们介绍异常过滤器,ExceptionFilter,它是用于用于全局的异常处理
2.项目使用
新增ExceptionAttribute.cs文件,代码如下所示:
public class ExceptionAttribute : ExceptionFilterAttribute
{
private readonly IWebHostEnvironment _env;
private readonly ILogger<ExceptionAttribute> _logger;
public ExceptionAttribute(IWebHostEnvironment env, ILogger<ExceptionAttribute> logger)
{
_env = env;
_logger = logger;
}
public override async Task OnExceptionAsync(ExceptionContext context)
{
Exception exception = context.Exception;
string msg = context.Exception.Message;
string sessionId = context.HttpContext.Items[ApiContextKeys.SESSION_ID];
string action = context.HttpContext.Items[ApiContextKeys.ACCESS_ACTION];
//逻辑处理
var error = new ResultDTO(-10, "系统异常");
if (_env.IsDevelopment())
{
error.Data = context.Exception.StackTrace;
}
if (exception is Exception)
{
SysException Exception = exception as SysException;
error.Code = Exception.Code;
error.Msg = Exception.Message;
}
else
{
//记录错误日志文件
_logger.LogError(exception, exception.Message);
}
context.Result = new ObjectResult(error) { StatusCode = (int)HttpStatusCode.OK };
context.HttpContext.Response.StatusCode = (int)HttpStatusCode.OK;
context.ExceptionHandled = true;
await base.OnExceptionAsync(context);
}
在StartUp.cs文件中的ConfigureServices函数加入下列代码:
public void ConfigureServices(IServiceCollection services)
{
services.AddControllers(config =>
{
config.Filters.Add(typeof(ExceptionAttribute));
});
}