ActionFilter和ResourseFilter的区别,及作用

执行localhost://*:1001/first/index

1.执行顺序不同,ResourceFilter在controller实例化之前调用,适合做缓存。ActionFilter在action方法前后调用。也能做缓存,但没有Resource性能好,controller需要实例化后才判断是否取缓存。ActionFilter适合做AOP加日志。

 

 2.若需要全部controller下面的方法都实现加日志,需要在startup类中配置一下

 public void ConfigureServices(IServiceCollection services)
{
   services.AddControllersWithViews(options => {
       options.Filters.Add(new ResponseCacheActionFilterAttribute());
   });
}

3.如果特性的构造函数有参数,比如把logger作为参数传进去。写法不同

 //[ResponseCacheActionFilter]
        [TypeFilter(typeof(ResponseCacheActionFilterAttribute))]
        public IActionResult Index()
        {
            Console.WriteLine("Action_Index");
            base.ViewBag.Now = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss fff");
            //base.HttpContext.Response.Headers[HeaderNames.CacheControl] = "public,max-age=60";
            return View();
        }

//startup类写法也不同。 services.AddControllersWithViews(options
=> { //options.Filters.Add(new ResponseCacheActionFilterAttribute()); options.Filters.Add<ResponseCacheActionFilterAttribute>(); });

 

posted @ 2022-04-10 23:13  留下成长的足迹  阅读(103)  评论(0编辑  收藏  举报