ASP.NET过滤器的应用方法介绍

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

那么在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的直接放过即可

(0)

相关推荐

  • asp.net core MVC 过滤器之ActionFilter过滤器(2)

    本系类将会讲解asp.net core MVC中的内置过滤器的使用,将分为以下章节 asp.net core MVC 过滤器之ExceptionFilter过滤器(一) asp.net core MVC 过滤器之ActionFilter过滤器(二) asp.net core MVC 过滤器之ResultFilter过滤器(三) asp.net core MVC 过滤器之ResourceFilter过滤器(四) asp.net core MVC 过滤器之AuthorizationFilter过滤器

  • ASP.NET mvc4中的过滤器的使用

    mvc4中的过滤器 过滤器(Filter)把附加逻辑注入到MVC框架的请求处理.实现了交叉关注. 交叉关注:用于整个应用程序,又不适合放在某个局部位置的功能. 过滤器是.NET的注解属性(Attribute),它们对请求处理管道添加了额外的步骤. 注解属性是派生于System.Attribute的特殊的.NET类. 可以被附加到类.方法.属性.字段等代码元素上.其目的是把附加信息嵌入到已编译的代码中,以便在运行时读回这些信息. 过滤器的基本类型: 过滤器类型 接口 默认实现 描述 Authori

  • Asp.Net MVC学习总结之过滤器详解

     一.过滤器简介 1.1.理解什么是过滤器 1.过滤器(Filters)就是向请求处理管道中注入额外的逻辑.提供了一个简单而优雅的方式来实现横切关注点. 2.所谓的过滤器(Filters),MVC框架里面的过滤器完全不同于ASP.NET平台里面的Request.Filters和Response.Filter对象,它们主要是实现请求和响应流的传输.通常我们所说的过滤器是指MVC框架里面的过滤器. 3.过滤器可以注入一些代码逻辑到请求处理管道中,是基于C#的Attribute的实现.当负责调用Act

  • asp.net core MVC 全局过滤器之ExceptionFilter过滤器(1)

    本系类将会讲解asp.net core MVC中的内置全局过滤器的使用,将分为以下章节 asp.net core MVC 过滤器之ExceptionFilter过滤器(一) asp.net core MVC 过滤器之ActionFilter过滤器(二) asp.net core MVC 过滤器之ResultFilter过滤器(三) asp.net core MVC 过滤器之ResourceFilter过滤器(四) asp.net core MVC 过滤器之AuthorizationFilter过

  • 详解ASP.NET MVC 常用扩展点:过滤器、模型绑定

    一.过滤器(Filter) ASP.NET MVC中的每一个请求,都会分配给对应Controller(以下简称"控制器")下的特定Action(以下简称"方法")处理,正常情况下直接在方法里写代码就可以了,但是如果想在方法执行之前或者之后处理一些逻辑,这里就需要用到过滤器. 常用的过滤器有三个:Authorize(授权过滤器),HandleError(异常过滤器),ActionFilter(自定义过滤器),对应的类分别是:AuthorizeAttribute.Han

  • ASP.NET过滤器的应用方法介绍

    在J2EE Web开发中有过滤器filter,该filter可以对指定的URL访问进行拦截,并执行过滤器的方法,根据实际应用情况,在过滤器中修改请求的代码.判断会话信息,也可以做权限控制,总之这个过滤器是非常有意义的,也可以说是责任链设计模式在J2EE中的一个应用. 那么在ASP.NET中是否也可以定义这样的过滤器结构,并在过滤器中进行相应的逻辑操作呢?答案是肯定,本文将告诉你如果编写一个过滤器,又如何配置到IIS的Web应用之中. 过程一:如何编写过滤器 编写过滤器,其实就是编写一个过滤器的类

  • ASP.NET Core MVC 过滤器的使用方法介绍

    过滤器的作用是在 Action 方法执行前或执行后做一些加工处理.使用过滤器可以避免Action方法的重复代码,例如,您可以使用异常过滤器合并异常处理的代码. 过滤器如何工作? 过滤器在 MVC Action 调用管道中运行,有时称为过滤器管道.MVC选择要执行的Action方法后,才会执行过滤器管道: 实现 过滤器同时支持同步和异步两种不同的接口定义.您可以根据执行的任务类型,选择同步或异步实现. 同步过滤器定义OnStageExecuting和OnStageExecuted方法,会在管道特定

  • 聊一聊Asp.net过滤器Filter那一些事

    最近在整理优化.net代码时,发现几个很不友好的处理现象:登录判断.权限认证.日志记录.异常处理等通用操作,在项目中的action中到处都是.在代码优化上,这一点是很重要着力点.这时.net中的过滤器.拦截器(Filter)就派上用场了.现在根据这几天的实际工作,对其做了一个简单的梳理,分享出来,以供大家参考交流,如有写的不妥之处,多多指出,多多交流. 概述: .net中的Filter中主要包括以下4大类:Authorize(授权),ActionFilter(自定义),HandleError(错

  • JBoss5.x下配置Log4j方法介绍

    最近在学习JBoss下配置Log4j,JBoss的各个版本的目录.JBoss和Log4j集成的文件名每次都有变化,在JBoss5.x下配置了log4j.xml文件,但是配置没有生效.如果你在项目中没有指定使用的log4j的配置文件,最好使用JBoss自带的配置文件,文件名为jboss-log4j.xml.该文件在Jboss容器的目录为:${JBOSS_HOME}\server\default\conf下.下面就是基于log4j默认配置的一些基本修改和注释: <span style="fon

  • ASP.NET实现伪静态网页方法小结

    本文实例总结了ASP.NET实现伪静态网页方法,分享给大家供大家参考之用.具体方法如下: 方法一:利用Httphandler实现URL重写(伪URL及伪静态) 我们有时候会见到这样的地址:"http://www.XXXX.com/show-12-34.html",你或许认为在站点服务器根目录"/"下存在名为"show-12-34.html"的文件,其实实际它可能是不存在的,而可能你看到的内容是"/aspx/show.aspx?type=

  • ASP使用MySQL数据库的方法

    MYSQL数据库以它短小.方便.速度快.免费等优点成为很多网站目前首选数据库,但一般都是用PHP+MYSQL相结合来开发各种动态页面,其实ASP也可以使用MYSQL数据库开发动态页面,小编我也是刚刚学会,不敢独享,所以特写了这篇文章供大伙参考. 我的环境是WINDOWS98+PWS4.0+mysql-3.23.32-win+PHP4 必要的软件:PWS4.0 mysql-3.23.32-win myodbc-2.50.36-dll 第一步:安装MYSQL ODBD的驱动程序,将下载的myodbd

  • Android开发实现文件关联方法介绍

    Android开发实现文件关联方法,做一个项目的时候,需要点击文件打开我们自己的app.首先讲一下点击普通文件打开app的方法,只需要三行代码,在app启动活动里加一个过滤器. <intent-filter> <category android:name="android.intent.category.LAUNCHER"> </category></action></intent-filter> <intent-fil

  • 在vue中使用公共过滤器filter的方法

    平时我们在vue中使用过滤器时,在模板中定义的过滤器不能在其他模板中使用,所以要在每个模板中定义自己的filter,这样就会出现很多重复的代码,那有没有办法定义一个公用的filter,减少代码的重复呢? 下面就给大家展示下使用最多且有效的方法吧! •首先在公用js中定义一个通用的filter.js,如下图所示,记得一定要把代码整个export出来 const vFilter={ numFilter:function (value) { // 截取当前数据到小数点后两位 let realVal =

  • xUnit 编写 ASP.NET Core 单元测试的方法

    还记得 .NET Framework 的 ASP.NET WebForm 吗?那个年代如果要在 Web 层做单元测试简直就是灾难啊..NET Core 吸取教训,在设计上考虑到了可测试性,就连 ASP.NET Core 这种 Web 或 API 应用要做单元测试也是很方便的.其中面向接口和依赖注入在这方面起到了非常重要的作用. 本文就来手把手教你如何用 xUnit 对 ASP.NET Core 应用做单元测试..NET Core 常用的测试工具还有 NUnit 和 MSTest,我本人习惯用 x

  • ASP.NET Core Razor页面用法介绍

    简介 随着ASP.NET Core 2 即将来临,最热门的新事物是Razor页面.在之前的一篇文章中,我们简要介绍了ASP.NET Core Razor 页面. Razor页面是ASP.NET Core的一个新功能,可以使基于页面的编程方式更容易,更高效. 大众的初步印象是对于那些只专注于页面的小型应用来说,Razor页面更容易.更快地取代MVC.然而,事实证明,它可能比这更强大.使用ASP.NET Core 2在创建新的应用程序时,Razor页面(空,Razor页面,Web API,MVC)是

随机推荐