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>(); });