那末在ASP.NET中是不是也能够定义如许的过滤器构造,并在过滤器中举行相应的逻辑操纵呢?答案是一定,本文将通知你假如编写一个过滤器,又怎样设置到IIS的Web运用当中。
历程一:怎样编写过滤器
编写过滤器,实在就是编写一个过滤器的类,也就是编写一个HttpModule模块,这个过滤器应当完成IHttpModule基类,并重写Init要领,给你一个现实的例子以下:
这是一个PageFilter.cs
using System; using System.Web; using System.Web.SessionState; using System.Collections.Generic; using System.Collections; using System.Text; using System.IO; public class PageFilter: IHttpModule { public String ModuleName { get { return "PageFilter"; } } //在 Init 要领中注册HttpApplication // 经由过程托付体式格局注册事宜 public void Init(HttpApplication application) { application.AcquireRequestState += new EventHandler(Application_AcquireRequestState); } private void Application_AcquireRequestState(Object source, EventArgs e) { HttpApplication application = (HttpApplication)source; HttpContext context = application.Context; HttpSessionState session = context.Session; HttpRequest request = context.Request; HttpResponse response = context.Response; String contextPath = request.ApplicationPath; } }
须要申明的是,“过滤器”也能够称为是“阻拦器”,即阻拦全部HTTP要求/相应的历程,由于全部要求/相应历程能够分为很多个阶段,那末这内里就会涉及到一个题目,也就是你的过滤器想阻拦详细的哪个阶段,上面的Init函数中,能够本身定义想阻拦的详细阶段,比方上面阻拦是发生要求会话的阶段,AcquireRequestStat是这个状况的代表,而阻拦后对应的处置惩罚函数为Application_AcquireRequestState,所以下面定义了一个Application_AcquireRequestState要领,在该要领中能够经由过程强迫范例转换取得application、context、session、request、response等一系列对象,在取得这些对象的基础上,你就能够举行中心营业逻辑的编写了,比方取得推断当前URL接见是不是正当,搜检当前接见是不是为登录后用户的接见等等。
别的既然有阻拦的全部历程有很多阶段,那末怎样阻拦别的的阶段呢?这个应当很简单了,与上面相似在Init中按以下逻辑定义即可:
application.阶段的规范称号1 += new EventHandler(该阶段对应的处置惩罚要领称号1);
application.阶段的规范称号2 += new EventHandler(该阶段对应的处置惩罚要领称号2);
。。。
阶段的规范称号,是说这些阶段是有规范的称号的,而且是application对象的规范属性,比方上面AcquireRequestState,另有诸如BeginRequest、AuthenticateRequest、AuthorizeRequest、ResolveRequestCache、AcquireRequestState、PreRequestHandlerExecute、PostRequestHandlerExecute、ReleaseRequestState、UpdateRequestCache、EndRequest很多阶段等等,这些阶段都有特定的寄义.
该阶段对应的处置惩罚要领称号,实在就是你本身定义对应这个阶段处置惩罚的要领,上面已有样例,不再多诠释。
另有一点须要特别注意,有那末多阶段能够阻拦,然则现实运用中,我们阻拦的每每也就一两个阶段,而且要注意有些服务器对象只要在特定的阶段才能够阻拦到,比方Session对象在BeginRequest阶段中是没有的,在AcquireRequestState及其今后阶段中是有的,因而要依据现实需求来阻拦详细的阶段,这个是新手最轻易碰到的题目。
历程二:怎样设置过滤
我们编写好了一个.cs文件的过滤器,那末怎样让这个过滤器起作用呢,这个须要举行设置,默许一定是不会阻拦的,你须要将该过滤器设置到运用的Web.config文件当中,上述样例的设置以下:
<configuration> <system.web> <httpModules> <add name="pageModule" type="PageFilter"/> </httpModules> </system.web> </configuration>
如许实在就设置好了,然后宣布网站生成dll等就能够了,到时后会自动阻拦URL接见的,不过要记着一点,默许状况下关于该运用的一切要求都会被阻拦,假如你指向阻拦特定的要求,比方想只对aspx文件的要求举行阻拦,那末能够在过滤器逻辑中到场对文件后缀名的推断,假如不是aspx的直接放过即可
更多ASP.NET过滤器的运用要领引见相干文章请关注ki4网!