设为首页 加入收藏

TOP

.Net Core MVC中过滤器简介(三)
2019-09-30 16:48:51 】 浏览:175
Tags:.Net Core MVC 过滤器 简介
) {
//context.HttpContext.Response.WriteAsync("ActionFilter Executing!"); Console.WriteLine("ActionFilter Executing!"); //this._logger.LogDebug("ActionFilter Executing!"); } }

还是要在Startup中进行全局的注册

services.AddMvc(o =>
{
    o.Filters.Add(typeof(CustomGlobalActionFilterAttribute));// 这里就是全局注册Filter

}).SetCompatibilityVersion(CompatibilityVersion.Version_2_2);

分别对全局、控制器、Action注册了ActionFilter默认执行顺序:

  全局OnActionExecuting===》控制器的OnActionExecuting====》Action的OnActionExecuting====》执行Action ====》Action的OnActionExecuted====》控制器的OnActionExecuted====》全局的OnActionExecuted。类似于一个俄罗斯套娃,也可以说是一个洋葱模型。

资源过滤器,是授权之后第一个用来处理请求的过滤器,也是最后一个接触到请求的过滤器(因为之后就会离开过滤器管道)。在性能方面,资源过滤器在实现缓存或短路过滤器管道尤其有用。继承IResourceFilter

 /// <summary>
 /// 自定义的资源Filter
 /// </summary>
 public class CustomResourceFilterAttribute : Attribute, IResourceFilter
 {
     private static readonly Dictionary<string, object> _Cache = new Dictionary<string, object>();
     private string _cacheKey;
     /// <summary>
     /// 控制器实例化之前
     /// </summary>
     /// <param name="context"></param>
     public void OnResourceExecuting(ResourceExecutingContext context)
     {
         _cacheKey = context.HttpContext.Request.Path.ToString();
         if (_Cache.ContainsKey(_cacheKey))
         {
             var cachedValue = _Cache[_cacheKey] as ViewResult;
             if (cachedValue != null)
             {
                 context.Result = cachedValue;
             }
         }
     }
     /// <summary>
     /// 把请求都处理完的
     /// </summary>
     /// <param name="context"></param>
     public void OnResourceExecuted(ResourceExecutedContext context)
     {
         if (!String.IsNullOrEmpty(_cacheKey) &&
             !_Cache.ContainsKey(_cacheKey))
         {
             var result = context.Result as ViewResult;
             if (result != null)
             {
                 _Cache.Add(_cacheKey, result);
             }
         }
     }
 }

 

首页 上一页 1 2 3 下一页 尾页 3/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇.Net Core权限认证基于Cookie的认.. 下一篇net core WebApi——定时任务Quar..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目