zoukankan      html  css  js  c++  java
  • .NET Core 管道过滤器扩展

                if (env.IsDevelopment())
                {
                    app.UseDeveloperExceptionPage();
                    app.UseBrowserLink();
                }
                else
                {
                    app.UseExceptionHandler("/Home/Error");
                }

    验证是否为开发环境     是就正常报错   否则跳转到错误页

    app.UseStaticFiles();

    验证当前请求是否存在物理物件   存在直接返回   不走MVC路由

    以前的管道模型  根据请求传递的控制器 方法  先实例化控制器  然后在invoke    在invoke中 执行管道中的20来个事件

    在.NET Core中  先进入授权验证等一系列操作   成功在实例化控制器等后续操作

    扩展过滤器    

        都需要继承Attribute     接口可以选择继承IActionFilter  IResourceFilter  IResultFilter 

      继承IActionFilters的过滤器在管道中的Action Filters环节触发 

      继承IResultFilter 的过滤器在管道中的IResultFilter 环节触发(自己在application层写的执行完毕后触发)

      继承ResourceFilters的过滤器其在管道的ResourceFilters环节触发   (适合做一些短路  比如缓存  这里存在就直接返回 )

    三种过滤器执行的前后顺序  ResourceFilters入→IActionFilters入→IActionFilters出→IResultFilter入→IResultFilter出→ResourceFilters出

    只有ResourceFilters在数据模型绑定之前   其他的都在数据模型绑定之后    异常处理过滤需要在进入数据模型绑定才出发

    这些过滤器的 context.Result就是返回的数据    进入下一环节之前  会进行验证context.Result中的数据是否为null   如果不为null  就直接返回了    

     局部过来:在方法上直接直接加上过滤器  

     全局过滤: 往容器中添加过滤器

            public IServiceProvider ConfigureServices(IServiceCollection services)
            {
                // MVC
                services.AddMvc(
                    options =>
                    {
                        options.Filters.Add(new CorsAuthorizationFilterFactory(_defaultCorsPolicyName));
                        options.Filters.Add(typeof(CustomActionFilterAttribute));
                    }
                );

     依赖注入也是在IServiceCollection中实现的

    1. 继承IActionFilter过滤器     

        public class CustomActionFilterAttribute: Attribute, IActionFilter
        {
            public void OnActionExecuting(ActionExecutingContext context)
            {
                Console.WriteLine("ActionFilter 之前!");
                //logger.Info("ActionFilter Executing!");
            }
            public void OnActionExecuted(ActionExecutedContext context)
            {
                Console.WriteLine("ActionFilter 之后!");
                //logger.Info("ActionFilter Executed!");
            }
        }

     2.继承ResourceFilters过滤器

        public class CustomResourceFilterAttribute : Attribute, IResourceFilter
        {
            private static readonly Dictionary<string, object> _Cache = new Dictionary<string, object>();
            private string _cacheKey;
    
            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;
                    }
                }
            }
    
            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);
                    }
                }
            }
        }

     ********************************

    扩展中间件  Middleware   Map适合做一些分发    根据请求条件指定中间件

    app.Map("/Jcb",MapTest)    请求到这里就不会继续往后面执行

    app.MapWhen()   跟上面的一样  更加灵活  但是都没有回头路  当前中间件就直接结束并返回

    UseWhen()  执行里面的后还继续往后面执行中间件

  • 相关阅读:
    [ jquery 选择器 :hidden ] 此方法选取匹配所有不可见元素,或者type为hidden的元素
    剑指 Offer 03. 数组中重复的数字 哈希
    LeetCode 1736. 替换隐藏数字得到的最晚时间 贪心
    Leetcode 1552. 两球之间的磁力 二分
    Leetcode 88. 合并两个有序数组 双指针
    LeetCode 1744. 你能在你最喜欢的那天吃到你最喜欢的糖果吗?
    LeetCode 1743. 相邻元素对还原数组 哈希
    LeetCode 1745. 回文串分割 IV dp
    剑指 Offer 47. 礼物的最大价值 dp
    剑指 Offer 33. 二叉搜索树的后序遍历序列 树的遍历
  • 原文地址:https://www.cnblogs.com/jiangchengbiao/p/10270505.html
Copyright © 2011-2022 走看看