Asp.net Core-过滤器

11

 

 

ResourceFilter:
和ActionFilter的区别是:OnResourceExecuting在Controller创建之前调用
public class CustomerResourceFilterAttribute : Attribute, IResourceFilter
    {
        private static ConcurrentDictionary<string, object> CACHE_DICT = new ConcurrentDictionary<string, object>();
        private string _cacheKey;
        public void OnResourceExecuting(ResourceExecutingContext context)
        {
            _cacheKey = context.HttpContext.Request.Path.ToString();
            if (CACHE_DICT.TryGetValue(_cacheKey, out object result))
            {
                var actionResult = result as IActionResult;
                if (actionResult != null)
                {
                    context.Result = actionResult;
                }                
            }
        }

        public void OnResourceExecuted(ResourceExecutedContext context)
        {
            if (!CACHE_DICT.ContainsKey(_cacheKey))
            {
                if (context.Result != null)
                {
                    CACHE_DICT.TryAdd(_cacheKey, context.Result);
              }
            }
            
        }

    }

 ActionFilter:

public class CustomerActionFilterAttribute : Attribute, IActionFilter
    {
        public void OnActionExecuting(ActionExecutingContext context)
        {
            Console.WriteLine("OnActionExecuting");
        }
        public void OnActionExecuted(ActionExecutedContext context)
        {
            Console.WriteLine("OnActionExecuted"); 
        }

    }

ResultFilter:

public class CustomerResultFilterAttribute : Attribute, IResultFilter
    {
        public void OnResultExecuting(ResultExecutingContext context)
        {
            Console.WriteLine("OnResultExecuting");
        }
        public void OnResultExecuted(ResultExecutedContext context)
        {
            Console.WriteLine("OnResultExecuted");
        }
    }

 

 

未完待续...

猜你喜欢

转载自www.cnblogs.com/fanfan-90/p/12144471.html