在asp.net中,我们可以使用HttpModule扩展自己的相关业务。可以在HttpApplication的19个管道事件中注入我们自己的业务逻辑代码。

闲话不说,代码先上。

一、新建网站项目

我们可以在该新建的网站项目里面做自己想要做的开发。

二、新建一个HttpModule扩展

我们可以在当前网站项目中自定义自己的HttpModule扩展类,也可以新建一个类库。这两种方式唯一的区别,就是在web.config文件中配置的时候,如果是新建的类库,需要在类全名后面打一个逗号,加上程序集名称。接下来请看:

新建一个类库,命名为MyHttpModule。

在MyHttpModule类库中添加System.Web的引用。因为HttpModule的扩展类需要继承IHttpModule接口。

接下来我们就可以在CustomeModule类中为所欲为啦!!!

IhttpModule有两个方法,即Init和Dispose。

Init方法接收一个HttpApplication实例对象,HttpApplication实例对象代表了当前的应用程序。我们可以在Init方法内部注册HttpApplication暴露出来的任何事件。

请看:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web; namespace MyHttpModule {
public class CustomModule:IHttpModule {
//可以在Init方法中注册事件,至于事件的实现需要另外定义
public void Init(HttpApplication context) {
//注册19个事件中的任意事件,也可以注册其他的事件,只要能获取到
context.BeginRequest += Context_BeginRequest;
context.EndRequest += Context_EndRequest;
} private void Context_BeginRequest(object sender, EventArgs e) {
//只要能获取HttpApplication实例对象,就可以为所欲为
HttpApplication application = sender as HttpApplication;
//获取HttpContext对象
HttpContext httpContext = application.Context;
//获取HttpRequest
HttpRequest request = httpContext.Request;
//获取HttpResponse
HttpResponse response = httpContext.Response;
//获取其他需要的...
//Get more... response.Write("<h3 style='color:white;background-color:black;text-align:center;'>开始处理请求...</h3>");
} private void Context_EndRequest(object sender, EventArgs e) {
//只要能获取HttpApplication实例对象,就可以为所欲为
HttpApplication application = sender as HttpApplication;
//获取HttpContext对象
HttpContext httpContext = application.Context;
//获取HttpRequest
HttpRequest request = httpContext.Request;
//获取HttpResponse
HttpResponse response = httpContext.Response;
//获取其他需要的...
//Get more... response.Write("<h3 style='color:white;background-color:black;text-align:center;'>请求处理完毕!</h3>");
} public void Dispose() { }
}
}

接下来,编译并生成该类库的dll文件。

将MyHttpModule.dll复制到网站项目的bin文件夹中。因为网站项目需要用到该dll文件。

接着再配置网站项目的web.config。

<?xml version="1.0" encoding="utf-8"?>

<!--
有关如何配置 ASP.NET 应用程序的详细信息,请访问
http://go.microsoft.com/fwlink/?LinkId=169433
--> <configuration>
<system.web>
<compilation debug="true" targetFramework="4.0" /> <!-- 在system.web的httpModules节配置我们刚才写的HttpModule扩展类-->
<httpModules>
<!--name="自定义模块名称" type="模块类的完全限定名(即需要加上命名空间),外部程序集名称(即dll的名称)-->
<add name="MyModule" type="MyHttpModule.CustomModule,MyHttpModule"/> <!--如果是在当前网站项目中编写的HttpModule扩展类,不需要加上程序集名称-->
<!--<add name="MyModule" type="MyHttpModule.CustomModule"/>-->
</httpModules>
</system.web> </configuration>

接下来让我们见证一下效果,估计会有惊喜:

首先在网站项目中添加一个Default.aspx文件,在该文件中随便输入一些文字。如下:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="webPro.Default" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title></title>
</head>
<body>
<div>
这是Default.aspx页面的信息
</div>
</body>
</html>

接着运行该页面。

页面运行效果图:

我勒个去,果然有惊吓。于是根据其相关提示,在web.config文件中,将httpModules节配置移动到system.webServer节点里面。

<?xml version="1.0" encoding="utf-8"?>

<!--
有关如何配置 ASP.NET 应用程序的详细信息,请访问
http://go.microsoft.com/fwlink/?LinkId=169433
--> <configuration>
<system.web>
<compilation debug="true" targetFramework="4.0" /> <httpModules>
</httpModules>
</system.web> <system.webServer>
<modules>
<!--name="自定义模块名称" type="模块类的完全限定名(即需要加上命名空间),外部程序集名称(即dll的名称)-->
<add name="MyModule" type="MyHttpModule.CustomModule,MyHttpModule"/> <!--如果是在当前网站项目中编写的HttpModule扩展类,不需要加上程序集名称-->
<!--<add name="MyModule" type="MyHttpModule.CustomModule"/>-->
</modules>
</system.webServer> </configuration>

再次运行Default.aspx页面,效果如下:

由此看来,我们确实可以在外部程序集中通过继承IHttpModule接口来实现我们自己的HttpModule类,并扩展相应的业务。

asp.net中HttpModule扩展的浅析的更多相关文章

  1. asp.net中C#对象与方法 属性详解

    C#对象与方法 一.相关概念: 1.对象:现实世界中的实体 2. 类:具有相似属性和方法的对象的集合 3.面向对象程序设计的特点:封装  继承 多态 二.类的定义与语法 1.定义类: 修饰符 类名称 ...

  2. ASP.Net中自定义Http处理及应用之HttpModule篇

    HttpHandler实现了类似于ISAPI Extention的功能,他处理请求(Request)的信息和发送响应(Response).HttpHandler功能的实现通过实现IHttpHandle ...

  3. Asp.net中的HttpModule和HttpHandler的简单用法

    在Asp.net中,HttpModule和HttpHandler均可以截取IIS消息进行处理,这使得我们制作人员能够非常方便的进行诸如图片水印添加,图片盗链检查等功能. 下面先就HttpModule的 ...

  4. ASP.NET中扩展FileUpload的上传文件的容量

    ASP.NET中扩展FileUpload只能上传小的文件,大小在4MB以内的.如果是上传大一点的图片类的可以在web.config里面扩展一下大小,代码如下 <system.web> &l ...

  5. Asp.Net中使用OpenRowSet操作Excel表,导入Sql Server(实例)

    有两种接口可供选择:Microsoft.Jet.OLEDB.4.0(以下简称 Jet 引擎)和Microsoft.ACE.OLEDB.12.0(以下简称 ACE 引擎). Jet 引擎大家都很熟悉,可 ...

  6. asp.net中的<%%> <%#%> <%=%>形式的详细用法 (转载)

    博客分类: ASP.NET   一. <%%>这种格式实际上就是和asp的用法一样的,只是asp中里面是vbscript或者javascript代码,而在asp.net中是.net平台下支 ...

  7. 在 ASP.NET 中创建数据访问和业务逻辑层(转)

    .NET Framework 4 当在 ASP.NET 中处理数据时,可从使用通用软件模式中受益.其中一种模式是将数据访问代码与控制数据访问或提供其他业务规则的业务逻辑代码分开.在此模式中,这两个层均 ...

  8. asp.net中使用基于角色role的Forms验证

    http://www.cnblogs.com/yao/archive/2006/06/24/434783.html asp.net中使用基于角色role的Forms验证,大致经过几下四步:1.配置系统 ...

  9. 看stackoverflow大牛如何回答何时在ASP.NET中使用异步控制器?

    转载自博客园:http://farb.cnblogs.com/ 今天无意中看到stackoverflow上一个很好的问答,个人觉得很有价值,所以翻译过来和大家共享!希望大家能相互交流. 在ASP.NE ...

随机推荐

  1. Python全栈开发-Day11-RabbitMQ/Redis

    本节内容 RabbitMQ——消息队列 Memcached & Redis使用 1.RabbitMQ——消息队列 RabbitMQ与Queue的关系 1.做的事情是一样的,两者都是队列. 2. ...

  2. MySQL中如何实现select top n ----Limit

    Mysql中limit的用法详解 在我们使用查询语句的时候,经常要返回前几条或者中间某几行数据,这个时候怎么办呢?不用担心,mysql已经为我们提供了这样一个功能. LIMIT 子句可以被用于强制 S ...

  3. HeadFirst Ruby 第十五章总结 Saving and loading data

    前言 在上一章讲述了如何进行基础的操作,比如 处理 GET 请求的 get route, 再比如下载 gem 等等方面的知识.在这一章节,作者告诉我们如何储存.处理数据.整个过程分三步走: 首先,当 ...

  4. Python 编程快速上手 第十八章 用 GUI 自动化控制键盘和鼠标

    前言 这一章节讲述了如何实现 GUI 自动化,首先讲了一些处理异常状况的方法,然后是关于 GUI 自动化的内容,主要有三个部分: 控制鼠标 图像识别 控制键盘 下面引用一段话: 请将 GUI 自动化看 ...

  5. RLE Plots: relative log expression

    RLE Plots: Visualising Unwanted Variation in High Dimensional Data 参考:RLE Plots: Visualising Unwante ...

  6. canvas学习之柱状图

    项目地址:http://pan.baidu.com/s/1nvhWrwP 因为最近项目中使用到了图表,而且个人一直希望研究canvas,所以最近几天花时间对canvas好好研究了一下,并写了一个dem ...

  7. IntelliJ IDEA 第一个 Scala 程序

    IntelliJ 安装完成 Scala 插件后,你需要尝试使用 IntelliJ 来创建并且运行第一个程序. 通常这个程序只是简单的输出 Hello World. 创建一个新工程 在文件下面选择新建, ...

  8. Fiddler简介及web抓包

    1.Fiddler界面如下   2.Fiddler开关 界面左下角或点击F12控制Fiddler开关,开关是“Capturing”: 启动之后,Fiddler代理永远是开着的.     3.浏览器代理 ...

  9. 为什么一刷新页面session没了

    最常见的的原因: session_start(); 没有放在文件最上面……

  10. Dedecmsv5.7整合ueditor 图片上传添加水印

    最近的项目是做dedecmsv5.7的二次开发,被要求上传的图片要加水印,百度ueditor编辑器不支持自动加水印,所以,找了很多资料整合记录一下,具体效果图 这里不仔细写dedecmsv5.7 整合 ...