如何正确的使用ASP.NET过滤器

介绍

如何正确的使用ASP.NET过滤器?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

过程一:如何编写过滤器

,编写过滤器,其实就是编写一个过滤器的类,也就是编写一个step 4模块,这个过滤器应该实现IHttpModule基类,并重写初始化方法,给你一个实际的例子如下:

这是一个PageFilter。cs

代码如下:


使用系统,使用包含
,
使用System.Web.SessionState;
使用System.Collections.Generic;使用System.Collections
,
使用text;使用先
,

公共类PageFilter: IHttpModule
{
,,,,,,,公共字符串ModuleName
,,,,,,,{
,,,,,,,,,,,{回报“PageFilter";}
,,,,,,,}

,,,,,,,//在初始化方法中注册HttpApplication
,,,,,,,//通过委托方式注册事件
,,,,,,,公共空间Init (HttpApplication应用程序)
,,,,,,,{
,,,,,,,,,,,应用程序。AcquireRequestState +=new EventHandler (Application_AcquireRequestState);,,,,,,,,,,,
,,,,,,,}

,私人空间Application_AcquireRequestState(对象来源,EventArgs e)

,,,,,,,{

,,,,,,,,,,,HttpApplication应用=(HttpApplication)来源;
,,,,,,,,,,,HttpContext上下文=application.Context;
,,,,,,,,,,,HttpSessionState会话=context.Session;
,,,,,,,,,,,HttpRequest请求=context.Request;
,,,,,,,,,,,HttpResponse响应=context.Response;
,,,,,,,,,,,字符串contextPath=request.ApplicationPath;
,,,,,,,}
}

,需要说明的是,“过滤器”也可以称为是“拦截器”,即拦截整个HTTP请求/响应的过程,因为整个请求/响应过程可以分为许多个阶段,那么这里面就会涉及到一个问题,也就是你的过滤器想拦截具体的哪一个阶段,上面的Init函数中,可以自己定义想拦截的具体阶段,例如上面拦截是产生请求会话的阶段,AcquireRequestStat是这个状态的代表,而拦截后对应的处理函数为Application_AcquireRequestState,所以下面定义了一个Application_AcquireRequestState方法,在该方法中可以通过强制类型转换获得应用程序上下文,会话、请求,响应等一系列对象,在获得这些对象的基础上,你就可以进行核心业务逻辑的编写了,例如获得判断当前URL访问是否合法,检查当前访问是否为登录后用户的访问等等。

,另外既然有拦截的整个过程有许多阶段,那么如何拦截其它的阶段呢?这个应该很简单了,与上面类似在初始化中按如下逻辑定义即可:

应用程序。阶段的标准名称1 +=new EventHandler(该阶段对应的处理方法名称1);
应用程序。阶段的标准名称2 +=new EventHandler(该阶段对应的处理方法名称2);

阶段的标准名称,是说这些阶段是有标准的名称的,而且是应用程序对象的标准属性,例如上面AcquireRequestState,还有诸如BeginRequest, AuthenticateRequest,以,ResolveRequestCache, AcquireRequestState, PreRequestHandlerExecute, PostRequestHandlerExecute, ReleaseRequestState, UpdateRequestCache, EndRequest许多阶段等等,这些阶段都有特定的含义。

,该阶段对应的处理方法名称,其实就是你自己定义对应这个阶段处理的方法,上面已有样例,不再多解释。

,还有一点需要特别注意,有那么多阶段可以拦截,但是实际应用中,我们拦截的往往也就一两个阶段,而且要注意有些服务器对象只有在特定的阶段才可以拦截到,例如会话对象在BeginRequest阶段中是没有的,在AcquireRequestState及其以后阶段中是有的,因此要根据实际需求来拦截具体的阶段,这个是新手最容易遇到的问题。

过程二:如何配置过滤

,我们编写好了一个cs文件的过滤器,那么如何让这个过滤器起作用呢,这个需要进行配置,默认肯定是不会拦截的,你需要将该过滤器配置到应用的网络。配置文件之中,上述样例的配置如下:

代码如下:


& lt; configuration>
& lt; system.web>
, & lt; httpModules>
,,& lt;添加名称=皃ageModule"类型=癙ageFilter"/祝辞
, & lt;/httpModules>
& lt;/system.web>
& lt;/configuration>

,这样其实就配置好了,然后发布网站生成dll等就可以了,到时后会自动拦URL截访问的,不过要记住一点,默认情况下对于该应用的所有请求都会被拦截,如果你指向拦截特定的请求,例如想只对aspx文件的请求进行拦截,那么可以在过滤器逻辑中加入对文件后缀名的判断,如果不是aspx的直接放过即可

关于如何正确的使用ASP.NET过滤器问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注行业资讯频道了解更多相关知识。

如何正确的使用ASP.NET过滤器