在.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 组件已经注入了,在这儿就可以使用该组件了。