`
guoyiqi
  • 浏览: 1011306 次
社区版块
存档分类
最新评论

在ASP.NET中如何添加过滤器(转自:http://www.zhangbo.name/izone/articles/9ck733p7h4v1.php)

 
阅读更多

熟悉J2EE Web应用开发的人,都知道在J2EE中有过滤器filter,该filter可以对指定的URL访问进行拦截,并执行过滤器的方法,根据实际应用情况,我们可以在过滤器中修改请求的编码,可以判断会话信息,可以做权限控制,总之这个过滤器是非常有意义的,也可以说是责任链设计模式在J2EE中的一个应用。

那么在ASP.NET中是否也可以定义这样的过滤器结构,并在过滤器中进行相应的逻辑操作呢?答案是肯定,本文将告诉你如果编写一个过滤器,又如何配置到IIS的Web应用之中,因为我很清楚,有些人好不容易知道了怎么写,但是却不知道该如何去配置,网上的帖子基本上是千篇一律的转贴,找半天也往往找不到。

过程一:如何编写过滤器

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

这是一个MyExampleFilter.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 MyExampleFilter: IHttpModule
{
public String ModuleName
{
get { return "MyExampleFilter"; }
}

// In the Init function, register for HttpApplication
// events by adding your handlers.
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许多阶段等等,这些阶段都有特定的含义,找个标准手册看一下(例如MSDN)或者Google一下也可以,再不清楚可以email给我。

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

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

过程二:如何配置过滤

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

<configuration>
<system.web>
<httpModules>
<add name="MyExampleModule" type="MyExampleFilter"/>
</httpModules>
</system.web>
</configuration>

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

说了这么多,不知道大家明白了整个过程没有,如果哪里还是有疑惑,可以联系我,具体的联系方式在http://www.zhangbo.name首页。

分享到:
评论

相关推荐

    集flv播放、转换为一体的小巧工具软件---flv转换器

    软件性质:免费软件 适用平台:Windows NT/2000/XP(不适用于Win98/me系统) 一款集flv播放、转换为一体的小巧工具软件,可以将flv(flash video)视频文件转换至avi/mp3/mp4/mpg/psp格式,具有批量...www.zhangbo.cn

    nginx设置rewrite规则

    在IT行业中,Nginx作为一款高性能的HTTP和反向代理服务器,经常被用来处理Web应用的重写规则。在LNMP(Linux + Nginx + MySQL + PHP)环境中,配置Nginx的rewrite规则是优化网站URL和实现动态URL静态化的重要步骤。...

    gongchangwangpi.github.io:zhangbo.github.io

    zhangbo.github.io zhangbo.github.io

    EasyGis:easyGis基于openlayer 5

    安装 $git clone https://10.6.8.8/zhangbo/Easygis $cd Easygis $webpack -p or $npm start ...添加Gis配置文件 const configData = { map_type: 'amap', //支持高德,百度,谷歌,等瓦片图 map_

    CustomMarshalers.zip

    在Unity引擎中,开发者经常需要集成C#与C++之间的互操作性,以便利用底层库的功能,例如在本例中的`interop.speechlib.dll`,它用于实现文字转语音(TTS)服务。`CustomMarshalers.zip`这个压缩包可能包含了一个...

    linux cmd 命令

    在Linux操作系统中,命令行工具(cmd)是用户与系统交互的主要方式。了解并熟练掌握基本的Linux命令对于日常操作和系统管理至关重要。以下是一些常见的Linux命令及其用途的详细解释: 1. **系统信息**: - `arch`...

    Interop.SpeechLib.zip

    public class SpeechTest : MonoBehaviour { Thread t; SpVoice spVoice; string DefaultEnglishLangID = "804";//中文 409:英文 ... string contentStr = ...

    osg-osgearth-3rdParty.x64-2015.7z

    osg: 3.4.0 osgearth:2.8 gdal:2.3.2 geos:3.4.3 proj:4.7.0 simgear: 2018.2.2 flightgear:2018.2.2 ffmpeg:4.1

    smart-car:面向前端开发人员的硬件入门指南,尽享其中!

    智能汽车 面向前端开发人员的硬件入门指南,尽享其中! 特点 实时摄像机。...zhangbo-网络与购物 lubaogui-硬件设计 G Freeman-编码 dingrui-语音识别 liyue-图像识别 lihao-外观设计 weina-场景设计 l

    xp中频预览关闭

    ### 在Windows XP中关闭视频预览的方法 在日常使用Windows XP操作系统的过程中,有时用户可能会遇到视频预览功能异常启动的情况,这不仅会占用系统资源,还可能引发一系列其他问题,如系统运行不稳定等。本文将详细...

    Enviro - Sky and Weather.7z

    * Volumetric Lighting requires at least shader-model 3.5+ and will be deactivated on DX9 Current limitation: * Volumetric clouds are currently not suitable for fly-throughs! Will be worked on in ...

    2806控制板

    - **复位电路**: 文档中未明确提及复位电路的具体实现方式,但通常复位电路会包含一个复位按钮和/或上电复位(POR)功能,确保微控制器在启动时处于已知状态。 - **电源管理**: 控制板上的电源管理模块负责为各个部分...

    osgExpInstallZHB.rar

    【标题】"osgExpInstallZHB.rar"是一个针对OpenSceneGraph (OSG)扩展的安装包,特别设计用于解决在OSG3.4版本中OSGExp.dll和OSGHelper.dll加载失败的问题。这个压缩包包含了针对3DMAX2015和OSGEARTH2.8的编译优化,...

    UGUI Super TreeView V1.24.zip

    u3d UGUI Super TreeView 分享, 5.5.4或更高可用 Features: - Support 3 animation effects of TreeView expanding or collapsing: Immediate, Scale and Clip. (It can expand items immediately, or expand ...

    osg3.4-2015-x64.7z

    《osg3.4.0在Windows x64平台上的应用详解》 osg3.4-2015-x64.7z这个压缩包文件,是针对OpenSceneGraph(简称osg)3.4.0版本的Windows x64平台编译优化后的库文件集合。OpenSceneGraph是一个开源的3D图形库,它提供...

    人工智能辅助糖尿病遗传风险预测参考文献

    在当前的医疗领域,人工智能(AI)的应用正在不断拓展,特别是在疾病预测和预防方面。糖尿病是一种全球性的慢性疾病,其遗传因素对发病风险有显著影响。这篇“人工智能辅助糖尿病遗传风险预测参考文献”集合,提供了...

    学生信息管理系统(基于VC++6.0)

    在信息技术领域,学生信息管理系统的开发是一项重要的工作,它旨在高效地管理和处理教育机构中的学生数据。本系统是利用Microsoft的集成开发环境——VC++6.0进行编写的,结合了Access数据库,提供了一套完整的功能,...

    数据结构学习超级宝典,带软件显示流程

    数据结构是计算机科学中的核心概念,它涉及到如何在内存中有效地组织和管理数据,以便进行高效的操作。在编程和算法设计中,理解并熟练运用数据结构至关重要。本资源"数据结构学习超级宝典,带软件显示流程"显然是...

    osgearth2.8osg3.4.chm

    osg3.4 和osgearth 2.8 自己编译的帮助手册,二合一。

    FSCapture_7.3_Chs.zip

    Please read the following terms and conditions carefully before using FastStone Capture. Use of this software indicates you accept the terms of this license agreement and warranty. ...

Global site tag (gtag.js) - Google Analytics