0
点赞
收藏
分享

微信扫一扫

net core 异常筛选器的应用


  1. 创建自定义异常类: 确保您的筛选器类 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

举报

相关推荐

0 条评论