一种把过滤器(Filter)附加到请求的处理管道中的方法

  大家都应该知道在ASP.NET MVC中,把一个Filter附加到控制器或动作方法上是使用的C#注解属性这个特性。

今天给大家说说另一种田间方式:自动的我们定义的Filter附加到控制器或者动作方法上,而不需要手动在动作方法or控制器上使用C#的注解属性特性。

第一步

定义一个接口IMonoFilterProvider,接口的名称随便取,里面没有任何方法和属性,作为一个标记接口。例如:

    public interface IMonoFilterProvider
    {
    }


第二步

定义一个实现了System.Web.Mvc.IFilterProvider接口的类,用于获取或设置对象的筛选器信息。

例如我的Mono项目中,定义了这样的一个类:

    public class MonoFilterProvider : IFilterProvider
    {

        public IEnumerable<Filter> GetFilters(ControllerContext controllerContext, ActionDescriptor actionDescriptor)
        {
            var lifetimeScope = GetLifetimeScope();
            var filterProviders =lifetimescope.Resolve<IEnumerable<IMonoFilterProvider>>();
            return filterProviders.Select(x => new Filter(x, FilterScope.Action, null));
        }
    }

在GetFilters()方法中,我使用IoC容器获取所有实现了第一步中接口的类的实力。如果使用IoC容器,你就必须把实现了IMonoFilterProvider的类全部注册到IoC容器中,也就是说,你用某种方式,等到所有实现类的实例即可。



第三步

  把第二步骤中定义的筛选器查找类添加到Mvc的全局筛选器查找类列表中。

 FilterProviders.Providers.Add(new MonoFilterProvider());

这个动作可以在Application_Start()方法中,也可以更早。



第四步

定义过滤器。方式和Mvc提供的方式一样,只要再最后添加一个实现接口IMonoFilterProvider即可,

 

时间: 2024-10-11 04:11:24

一种把过滤器(Filter)附加到请求的处理管道中的方法的相关文章

小程序请求豆瓣API报403解决方法

微信小程序使用wx.request API请求豆瓣公开api的时候,会报一个403(Forbidden)的错误.这是为什么呢?是由于来自小程序的调用过多,豆瓣来自于小程序的调用被禁止.这里收集以下三种方法解决此问题(设置代理): 1.使用 https://douban.uieee.com 2.使用 https://www.zhihu.com/question/265806694/answer/302894881 以上两种方法均是设置代理请求豆瓣API数据. 使用方法:把 https://www.

javaweb-Servlet过滤器Filter

一.在javaweb学习中javaweb过滤器是一个非常重要的学习内容在web开发阶段的中Javaweb过滤器可以很好的优化代码,同时减少许多不必要的代码,将代码很好的集合在一起,这样的操作可以减少许多不必要的代码,同时大大的减少程序的运行. 二.正对于javaweb的过滤器Filter可以从以下几个方面进行讲解 1.Javaweb的概念 javaweb是一个服务器组键,他可以截取用户端的请求以及响应的信息,并且对信息进行过滤. 2.过滤器的api  Servlet过滤器API包含了3个接口,它

深入分析JavaWeb Item36 -- 过滤器Filter高级应用

在filter中可以得到代表用户请求和响应的request.response对象,因此在编程中可以使用Decorator(装饰器)模式对request.response对象进行包装,再把包装对象传给目标资源,从而实现一些特殊需求. 一.Decorator设计模式 1.1.Decorator设计模式介绍 当某个对象的方法不适应业务需求时,通常有2种方式可以对方法进行增强: 编写子类,覆盖需增强的方法. 使用Decorator设计模式对方法进行增强. 使用代理 在阎宏博士的<JAVA与模式>一书中

JavaWeb--Servlet过滤器Filter和SpringMVC的HandlerInterceptor(Session和Cookie登录认证)

拦截一些请求进行处理,比如通过它来进行权限验证,或者是来判断用户是否登陆,日志记录,编码,或者限制时间点访问等等,是非常有必要的.所以就有了此篇文章啦. 文章结构:(1)Servlet过滤器Filter:(2)SpringMVC的HandlerInterceptor:(3)对比认知. 一.Servlet过滤器Filter: 此部分是从赵四大佬那里学来的,并补充自己的认知 (1)概念: 能够对Servlet容器的请求和响应对象进行检查和修改. Servlet过滤器本身并不产生请求和响应对象,它只能

web day21 web过滤器Filter,应用案例统计IP,解决全站乱码,粗粒度权限控制,页面静态化

JavaWeb三大组件 1. 都需要在web.xml中进行配置 Servlet Listener(2个感知监听器不需要配置) Filter 过滤器 它会在一组资源(jsp.servlet..css..html等等)的前面执行! 它可以让请求得到目标资源,也可以不让请求达到! * 过滤器有拦截请求的能力! 登录: 允许它访问AServlet.BServlet.CServlet ------------------------------- 过滤器如何编写 1. 写一个类实现Filter接口 2.

Servlet过滤器--Filter

一.定义: 是一种特殊的Servlet,可以用来对请求进行过滤,多个过滤器可以形成过滤链: 当请求发送到servlet之前,可以用过滤器截获和处理请求,在servlet结束工作之后,在响应发回给客户之前,可以用过滤器处理响应. 实现javax.servlet.Filter接口里面的 init,doFilter.destroy等抽象方法,是过滤器的生命周期. 过滤器的工作原理: 二.Web.xml中的配置声明 根据servlet2.3规范,filter执行是按照 filter-mapping 先后

ASP.NET MVC Filters 4种默认过滤器的使用【附示例】

http://www.cnblogs.com/oppoic/p/mvc_authorization_action_result_exception_filters.html ASP.NET MVC Filters 4种默认过滤器的使用[附示例] 过滤器(Filters)的出现使得我们可以在ASP.NET MVC程序里更好的控制浏览器请求过来的URL,不是每个请求都会响应内容,只响应特定内容给那些有特定权限的用户,过滤器理论上有以下功能: 判断登录与否或用户权限 决策输出缓存 防盗链 防蜘蛛 本地

监听器listener&amp;过滤器filter

Servlet技术规范 描述三种技术 : Servlet(服务器小程序) .Filter(过滤器) .Listener(监听器) Filter运行在服务器端,对服务器端web资源的访问 进行拦截,起到过滤的作用 Servlet API中 定义接口 Filter,用户只需要编写程序实现Filter接口,完成过滤器编写 Filter快速入门1.编写类 实现 Filter接口2.在服务器端注册 Filter (配置拦截哪个web资源) ----- web.xml   <!-- 注册过滤器 --> 

asp.net MVC之 自定义过滤器(Filter) - shuaixf

一.系统过滤器使用说明 1.OutputCache过滤器 OutputCache过滤器用于缓存你查询结果,这样可以提高用户体验,也可以减少查询次数.它有以下属性: Duration :缓存的时间, 以秒为单位 ,理论上缓存时间可以很长,但实际上当系统资源紧张时,缓存空间还是会被系统收回. VaryByParam :以哪个字段为标识来缓存数据,比如当"ID"字段变化时,需要改变缓存(仍可保留原来的缓存),那么应该设VaryByParam为"ID".这里你可以设置以下几