在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. Codeforces 1043 F - Make It One

    F - Make It One 思路: dp + 容斥 首先, 答案不会超过7, 因为前7个质数的乘积大于3e5(最坏的情况是7个数, 每个数都缺少一个不同的因子) 所以从1到7依次考虑 dp[i][ ...

  2. 响应式图片 (responsive image)

    更新 : 2019-02-21 除了写 srcset sizes 还有一种 x1, x2, x3, x4 的写法. 我们对比一下 假设 pc 希望是 1000w mobile 希望是 300w siz ...

  3. Restful Api 的好与坏

    restful 的特色是接口少 get,put,post,delete 好处是容易记, 统一. 但是业务上往往不会这么简单. 不同的 user/roles 调用同一个 get 接口, 出来的结果不一定 ...

  4. English trip M1 - PC6 Likes and Dislike Teacher:Jade

    In this lesson you will learn to talk about likes and dislikes. 课上内容(Lesson) # 通常在习惯性的表达式用 it's 来表达w ...

  5. ssh登陆被拒?(云:使用云的网页版远程登陆) 不好用。

    设定的密

  6. 在项目中使用react

    1. 运行 ’cnpm i react react-dom -S' 安装包 react:专门用于创建组件和虚拟DOM,同时组件的生命周期都在这个包中 react-dom:专门进行DOM操作,主要应用场 ...

  7. suse11安装mysql5.7

    下载地址http://mirrors.sohu.com/mysql/MySQL-5.7/ 1.    wget -c  http://mirrors.sohu.com/mysql/MySQL-5.7/ ...

  8. hdu-1817-polya

    Necklace of Beads Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others ...

  9. PAT 1035 Password

    1035 Password (20 分)   To prepare for PAT, the judge sometimes has to generate random passwords for ...

  10. 2017-6-6&6-8/大型网站架构总结

    一.WikiPedia(维基百科) WikiPedia是非盈利网站,因此尽可能地使用免费的软件和廉价的服务器.截止到2012年,这个只有区区数百台服务器和十余个技术人员开发.维护的网站,成为流量全球排 ...