zoukankan      html  css  js  c++  java
  • 全局过滤器中排除指定Controller和action方法(二)

       前文贴出了一种方式来排除Controller和action方法,但是感觉不太实用,因为如果遇到多个控制器,多个方法,就很难辨别了,今天我来介绍一种方式,加上标签,这种方法比较简单,相信你也会喜欢,麻烦的就是每个全局过滤器都要对应一个 不启用该全局过滤器的标签,不过为了功能实现,这点我们也暂时不去计较了吧。

    首先,我们创建一个特性,内部什么都不用写,只是当作一个标识,占位的标识:

     1   /// <summary>
     2     /// 不启用压缩特性
     3     /// </summary>
     4     [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = false, Inherited = false)]
     5     public class NoCompress : Attribute
     6     {
     7         public NoCompress()
     8         {
     9         }
    10     }

    接着呢,在全局过滤器中把你要排除的控制器或者过滤器一一贴上此标签。

     1         [NoCompress]
     2         public ActionResult Contact()
     3         {
     4             ViewBag.Message = "你的联系方式页。";
     5 
     6             return this.View();
     7         }
     8 
     9         [NoCompress]
    10         public ActionResult Grid()
    11         {
    12             return this.View();
    13         }

    类似如此....

    最后,就是写过滤器了,以压缩过滤器为例:

       /// <summary>
            /// 执行压缩方法
            /// </summary>
            /// <param name="filterContext"></param>
            public override void OnActionExecuting(ActionExecutingContext filterContext)
            {
                object[] actionFilter = filterContext.ActionDescriptor.GetCustomAttributes(typeof(NoCompress), false);
                object[] controllerFilter = filterContext.ActionDescriptor.ControllerDescriptor.GetCustomAttributes(typeof(NoCompress), false);
                if (controllerFilter.Length == 1 || actionFilter.Length == 1)
                {
                    return;
                }
    
                HttpRequestBase request = filterContext.HttpContext.Request;
                HttpResponseBase response = filterContext.HttpContext.Response;
                string acceptEncoding = request.Headers["Accept-Encoding"].ToLower();
    
                if (string.IsNullOrEmpty(acceptEncoding))
                {
                    return;
                }
    
                if (acceptEncoding.Contains("gzip"))
                {
                    response.Filter = new GZipStream(response.Filter, compress);
                    response.AppendHeader("Content-Encoding", "gzip");
                }
                else if (acceptEncoding.Contains("deflate"))
                {
                    response.Filter = new DeflateStream(response.Filter, compress);
                    response.AppendHeader("Content-Encoding", "deflate");
                }
            }

    接着上文一样,添加全局过滤器。

      public static void RegisterGlobalFilters(GlobalFilterCollection filters)
            {
              filters.Add(new CompressFilterAttribute());
            }

    好了,大功告成。

  • 相关阅读:
    SQLI DUMB SERIES-12
    SQLI DUMB SERIES-11
    SQLI DUMB SERIES-9&&10
    SQLI DUMB SERIES-8
    SQLI DUMB SERIES-7
    XXS level10
    XXS level9
    XXS level8
    XXS level7
    XXS level6
  • 原文地址:https://www.cnblogs.com/yangda/p/2970860.html
Copyright © 2011-2022 走看看