- 创建自定义异常类: 确保您的筛选器类
CustomerExceptionFilter
的构造函数可接受所需的依赖项并确保这些依赖项已在 DI 容器中注册。例如:
public class CustomerExceptionFilter : IExceptionFilter
{
public void OnException(ExceptionContext context)
{
// 处理异常逻辑
var result = new
{
Code = 500,
Message = "服务器内部错误OnException",
Detail = context.Exception.Message
};
context.Result = new JsonResult(result);
context.ExceptionHandled = true;
}
}
2.注册筛选器类: 确保您在 Startup.cs
文件的 ConfigureServices
方法中正确注册了 CustomerExceptionFilter
。以下是如何进行注册的示例:
public void ConfigureServices(IServiceCollection services)
{
// 注册 CustomerExceptionFilter
services.AddScoped<CustomerExceptionFilter>(); // 注册为 Scoped 生命周期
// 在全局范围内添加异常筛选器
services.AddControllers(options =>
{
options.Filters.AddService<CustomerExceptionFilter>(); // 注册为全局筛选器
});
}
3.异常筛选器的使用: 在控制器或其他地方使用 ServiceFilter
特性,
private readonly IWebHostEnvironment _webHostEnvironment;
private readonly ILogger<testController> _logger;
private readonly CustomerExceptionFilter _customExceptionFilter;
public testController(IWebHostEnvironment webHostEnvironment, ILogger<testController> logger, CustomerExceptionFilter customExceptionFilter)
{
_webHostEnvironment = webHostEnvironment;
_logger = logger;
_customExceptionFilter = customExceptionFilter;
}
[HttpGet("{id}")]
[ServiceFilter(typeof(CustomerExceptionFilter))] // 使用异常筛选器
public async Task<object> GetEnv(int id)
{
await Task.Delay(1000);
var env = _webHostEnvironment.EnvironmentName;
_logger.LogInformation(env);
_logger.LogError(env);
_logger.LogWarning(env);
_logger.LogDebug(env);
_logger.LogCritical(env);
throw new Exception("error");
return Ok(new
{
Environment = env+","+id
});
}
4.全局错误处理和异常筛选器如何都存在,异常筛选器优先触发。
我的其他项目: https://www.cnblogs.com/yatai-bd