热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

全局过滤器中排除指定Controller和action方法

最近一直被这个问题所困扰,现在想了一个方案,特贡献出来给大伙,技术不好,还请指教,如有更好的方法,还请告诉我,谢谢。1<summary>2

最近一直被这个问题所困扰,现在想了一个方案,特贡献出来给大伙,技术不好,还请指教,如有更好的方法,还请告诉我,谢谢。

 1   /// 
 2         /// 检查是否排除过滤器
 3         /// 
 4         /// 方法执行上下文
 5         /// 
 6         public bool IsRemoveFilter(ActionExecutingContext filterContext)
 7         {
 8             bool check = false;
 9             string cOntrollerName= filterContext.ActionDescriptor.ControllerDescriptor.ControllerName;
10             if (this.RemoveActiOnName== null)
11             {
12                 check = CustomCompareStrings(RemoveControllerName, controllerName);
13             }
14             else
15             {
16                 string actiOnName= filterContext.ActionDescriptor.ActionName;
17                 if (CustomCompareStrings(RemoveControllerName, controllerName))
18                 {
19                     check = CustomCompareStrings(RemoveActionName, actionName);
20                 }
21             }
22             return check;
23         }

这其中,我自定义了一个比较方法,判断当前的控制器或者action方法是否设置了的排除对象。

 1  /// 
 2         /// 自定义比较方法
 3         /// 
 4         /// 用户设置的排除过滤器的值
 5         /// 当前所在页面的ActionName或ControllerName的值
 6         /// 
 7         public bool CustomCompareStrings(string useSetValue, string nowPageValue)
 8         {
 9             string[] values;
10             if (useSetValue != null)
11             {
12                 if (useSetValue.Contains(','))
13                 {
14                     values = useSetValue.ToLower().Split(',');
15                     foreach (string value in values)
16                     {
17                         if (value == nowPageValue.ToLower())
18                         {
19                             return true;
20                         }
21                     }
22                 }
23                 else
24                 {
25                     if (useSetValue.ToLower() == nowPageValue.ToLower())
26                     {
27                         return true;
28                     }
29                 }
30             }
31             return false;
32         }

好了,开始运用在自定义过滤器中了。

 1     /// 
 2     /// 文件压缩特性
 3     /// 
 4     public class CompressFilterAttribute : ActionFilterAttribute
 5     {
 6         private const CompressionMode compress = CompressionMode.Compress;
 7 
 8         /// 
 9         /// 构造函数
10         /// 
11         public CompressFilterAttribute()
12         {
13         }
14 
15         /// 
16         /// 执行压缩方法
17         /// 
18         /// 
19         public override void OnActionExecuting(ActionExecutingContext filterContext)
20         {
28             if (IsRemoveFilter(filterContext))
29             {
30                 filterContext.HttpContext.Response.Write("该页未执行GZIP压缩");
31                 return;
32             }
33 
34             HttpRequestBase request = filterContext.HttpContext.Request;
35             HttpResponseBase respOnse= filterContext.HttpContext.Response;
36             string acceptEncoding = request.Headers["Accept-Encoding"].ToLower();
37 
38             if (string.IsNullOrEmpty(acceptEncoding))
39             {
40                 return;
41             }
42 
43             if (acceptEncoding.Contains("gzip"))
44             {
45                 response.Filter = new GZipStream(response.Filter, compress);
46                 response.AppendHeader("Content-Encoding", "gzip");
47             }
48             else if (acceptEncoding.Contains("deflate"))
49             {
50                 response.Filter = new DeflateStream(response.Filter, compress);
51                 response.AppendHeader("Content-Encoding", "deflate");
52             }
53         }
54 
55     }

 

接下来就是将我们的过滤器注册到全局过滤器中了。

1         /// 
2         /// 注册全局过滤器
3         /// 
4         /// 
5         public static void RegistrationGlobalFilters(GlobalFilterCollection filter)
6         {
7             filter.Add(new HandleErrorAttribute());
8             filter.Add(new CompressFilterAttribute("Home", "Index"));
9         }

最后,我们来看看效果吧。 

由于之前设置了,排除了Home控制器下的index方法,也就没有对页面进行GZIP压缩了。 

这只是我自己想的一种方法,如果你有更好的方法,记得告诉我,谢谢。


推荐阅读
  • 第四章高阶函数(参数传递、高阶函数、lambda表达式)(python进阶)的讲解和应用
    本文主要讲解了第四章高阶函数(参数传递、高阶函数、lambda表达式)的相关知识,包括函数参数传递机制和赋值机制、引用传递的概念和应用、默认参数的定义和使用等内容。同时介绍了高阶函数和lambda表达式的概念,并给出了一些实例代码进行演示。对于想要进一步提升python编程能力的读者来说,本文将是一个不错的学习资料。 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • 本文详细介绍了MysqlDump和mysqldump进行全库备份的相关知识,包括备份命令的使用方法、my.cnf配置文件的设置、binlog日志的位置指定、增量恢复的方式以及适用于innodb引擎和myisam引擎的备份方法。对于需要进行数据库备份的用户来说,本文提供了一些有价值的参考内容。 ... [详细]
  • 本文介绍了Perl的测试框架Test::Base,它是一个数据驱动的测试框架,可以自动进行单元测试,省去手工编写测试程序的麻烦。与Test::More完全兼容,使用方法简单。以plural函数为例,展示了Test::Base的使用方法。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • 前景:当UI一个查询条件为多项选择,或录入多个条件的时候,比如查询所有名称里面包含以下动态条件,需要模糊查询里面每一项时比如是这样一个数组条件:newstring[]{兴业银行, ... [详细]
  • 本文讨论了在手机移动端如何使用HTML5和JavaScript实现视频上传并压缩视频质量,或者降低手机摄像头拍摄质量的问题。作者指出HTML5和JavaScript无法直接压缩视频,只能通过将视频传送到服务器端由后端进行压缩。对于控制相机拍摄质量,只有使用JAVA编写Android客户端才能实现压缩。此外,作者还解释了在交作业时使用zip格式压缩包导致CSS文件和图片音乐丢失的原因,并提供了解决方法。最后,作者还介绍了一个用于处理图片的类,可以实现图片剪裁处理和生成缩略图的功能。 ... [详细]
  • 解决.net项目中未注册“microsoft.ACE.oledb.12.0”提供程序的方法
    在开发.net项目中,通过microsoft.ACE.oledb读取excel文件信息时,报错“未在本地计算机上注册“microsoft.ACE.oledb.12.0”提供程序”。本文提供了解决这个问题的方法,包括错误描述和代码示例。通过注册提供程序和修改连接字符串,可以成功读取excel文件信息。 ... [详细]
  • 本文介绍了Android中的assets目录和raw目录的共同点和区别,包括获取资源的方法、目录结构的限制以及列出资源的能力。同时,还解释了raw目录中资源文件生成的ID,并说明了这些目录的使用方法。 ... [详细]
  • 本文介绍了H5游戏性能优化和调试技巧,包括从问题表象出发进行优化、排除外部问题导致的卡顿、帧率设定、减少drawcall的方法、UI优化和图集渲染等八个理念。对于游戏程序员来说,解决游戏性能问题是一个关键的任务,本文提供了一些有用的参考价值。摘要长度为183字。 ... [详细]
  • 本文总结和分析了JDK核心源码(2)中lang包下的基础知识,包括常用的对象类型包和异常类型包。在对象类型包中,介绍了Object类、String类、StringBuilder类、StringBuffer类和基本元素的包装类。在异常类型包中,介绍了Throwable类、Error类型和Exception类型。这些基础知识对于理解和使用JDK核心源码具有重要意义。 ... [详细]
  • 简述在某个项目中需要分析PHP代码,分离出对应的函数调用(以及源代码对应的位置)。虽然这使用正则也可以实现,但无论从效率还是代码复杂度方面考虑ÿ ... [详细]
  • PHP输出缓冲控制Output Control系列函数详解【PHP】
    后端开发|php教程PHP,输出缓冲,Output,Control后端开发-php教程概述全景网页源码,vscode如何打开c,ubuntu强制解锁,sts启动tomcat慢,sq ... [详细]
  • KVC:Key-valuecodingisamechanismforindirectlyaccessinganobject’sattributesandrelations ... [详细]
  • 渗透测试基础bypass绕过阻挡我们的WAF(下)
    渗透测试基础-bypass ... [详细]
author-avatar
游你精彩_980_469
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有