学海无涯

导航

筛选器 filter

筛选器 filter 又称过滤器,是 APS.NET Core 中提供的一种切面编程机制,它允许开发者创建自定义筛选器来处理横切关注点,也就是在APS.NET Core 特定的位置执行自定义的代码,比如在控制器的操作方法之前执行数据检查的代码,或者在ActionResult执行时向响应报文头中写入自定义数据等。

ASP.ENT Core 中筛选器有5种类型:授权筛选器、资源筛选器、操作筛选器、异常筛选器、结果筛选器。

 自定义异常筛选器:

 public class MyExceptionFilter : IAsyncExceptionFilter
    {
        private readonly ILogger<MyExceptionFilter> _logger;
        private readonly IHostEnvironment _env;
        public MyExceptionFilter(ILogger<MyExceptionFilter> logger, IHostEnvironment env)
        {
            _logger = logger;
            _env = env;
        }

        public Task OnExceptionAsync(ExceptionContext context)
        {
            Exception exception = context.Exception;
            _logger.LogError(exception, "UnhandledException occured");
            string message;
            if (_env.IsProduction() == true)
            {
                message = "程序中出现未处理的异常";
            }
            else
            {
                message = exception.ToString();
            }
            ObjectResult result = new ObjectResult(new { code = 500, message = message });
            result.StatusCode = 500;
            context.Result = result;//设置响应报文
            context.ExceptionHandled = true;//不再执行默认的异常响应逻辑。
            return Task.CompletedTask;
        }
    }

注册全局异常筛选器:

builder.Services.Configure<MvcOptions>(options =>
{
    options.Filters.Add<MyExceptionFilter>();
});

  

posted on 2022-10-02 21:19  宁静致远.  阅读(77)  评论(0编辑  收藏  举报