.net core mvc/webapi 过滤器(FilterAttribute)依赖注入方式

在.net core MVC和 .net core webapi 项目中,通常需要加入过滤器FilterAttribute来处理一些接口权限、参数验证的问题。在过滤器我们需要用到系统已经注入的插件(类)等。过滤器的Controller中的方法上标注就会提示我们没有零个参数的构造器。怎么处理这个问题呢?

第一步:注入筛选器

public void ConfigureServices(IServiceCollection services)
{ 
            //注入筛选器
            services.AddScoped<ApiActionFilterAttribute>();
}

ApiActionFilterAttribute 为自定义的 ActionFilterAttribute ,继承于ActionFilterAttribute,【其它过滤器亦可以这样搞】

第二步:方法上添加标注


        [ServiceFilter(typeof(ApiActionFilterAttribute))]

我这里利用了微软已提供 的 ServiceFilter 这个服务。

第三步:使用已注册的组件(插件、类)

 public class ApiActionFilterAttribute : ActionFilterAttribute
 {
        private readonly ILogger<ApiActionFilterAttribute> _logger; 
        public ApiActionFilterAttribute(Microsoft.Extensions.Options.IOptions<ILogger<ApiActionFilterAttribute> logger)
        { 
            _logger = logger;
        }
        public override void OnActionExecuting(ActionExecutingContext actionContext)
        {
            _logger.LogInformation(Newtonsoft.Json.JsonConvert.SerializeObject(actionContext.HttpContext.Request.Headers));
        }
}

我这里的ILogger 组件已经注入了,在这儿就可以使用该组件了。

发布了12 篇原创文章 · 获赞 0 · 访问量 653

猜你喜欢

转载自blog.csdn.net/oopxiajun2011/article/details/104874466