asp.net IHttpModule浅析
在asp.net程序中,我们除了使用系统自带的HttpModule模块,还可以自己定义一些自己的HttpModule接口模块。一个asp.net程序可以接收多个HttpModule模块。
众所周知,asp.net web有19个管道事件,我们除了可以在Global.asax中实现其中的某些管道事件,还可以通过IHttpModule接口实现这些管道事件。
一、定义自己的HttpModule模块
新建一个framework类库项目,新增一个OutsideMyModule类,并继承IHttpModule接口。代码如下所示:
//HttpModule无法注册和响应Session 事件,Session事件只能在Global.asax中注册
public class OutsideMyModule : IHttpModule
{
//IHttpModule可以暴露出自定义的事件,在web程序的Global.asax中,
//以 模块名称_事件名称 的方式实现事件的内容,其中模块名称是在web.config注册的模块名称,并不是模块自己的类名称
public event EventHandler ExposedEvent; public void Init(HttpApplication context)
{
context.BeginRequest += Context_BeginRequest;
} private void Context_BeginRequest(object sender, EventArgs e)
{
var application = sender as HttpApplication;
var items = application.Request.RequestContext.HttpContext.Items;
if (!items.Contains(ConstString.RequestId))
items[ConstString.RequestId] = Guid.NewGuid().ToString("N");
application.Response.Write("OutsideMyModule'BeginRequest->");
OnExposeEvent(e);
} protected void OnExposeEvent(EventArgs e)
{
if (ExposedEvent != null)
ExposedEvent(this, e);
} public void Dispose()
{
//throw new NotImplementedException();
}
}
二、使用HttpModule模块
新建一个web项目,引用上面那个项目,并在web.config中配置如下:

这里有一个需要注意的地方,如果IIS中的应用程序模式使用集成模式,则需要在system.webServer节点中配置,如果需要使用经典模式,则需要在system.web节点中配置。
这样就将我们自定义的HttpModule模块加入到了web项目中。
三、在web项目的Global.asax中实现我们自定义HttpModule模块中暴露出的事件
我们可以在自定义的HttpModule模块中定义自己的事件,并在Global.asax中去实现该事件。
web项目中Global.asax文件中的代码如下所示:
public class WebApiApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
GlobalConfiguration.Configure(WebApiConfig.Register);
}
//Global.asax是一个全局文件,他可以注册应用程序和Session事件,还可以注册HttpModule中暴露的事件(包括内置的HttpModule和自定义的HttpModule)
//HttpModule无法注册和响应Session 事件,Session事件只能在Global.asax中注册
//IHttpModule可以暴露出自定义的事件,在web程序的Global.asax中,
//以 模块名称_事件名称 的方式实现事件的内容,其中模块名称是在web.config注册的模块名称,并不是模块自己的类名称
protected void outsideMyModule_ExposedEvent(object sender,EventArgs e) {
Response.Write(" myTestModule_ExposeEvent ");
}
}
接着我们定义一个api接口来看看结果。api接口的定义如下代码:
public class ModulesController : ApiController
{
[HttpGet]
public async Task<string> Index()
{
var requestId = (string)HttpContext.Current.Items[ConstString.RequestId]??"no requestId";
return await Task.FromResult(requestId);
}
}
接着运行程序,看看结果:

asp.net IHttpModule浅析的更多相关文章
- Asp.Net Mvc: 浅析TempData机制(转发 作者: Tristan G )
Asp.Net Mvc: 浅析TempData机制 环境: Windows 2008, VS 2008 SP1, Asp.Net Mvc 1.0 --------------------------- ...
- Owin+ASP.NET Identity浅析系列(五)接入第三方登录
在今天,读书有时是件“麻烦”事.它需要你付出时间,付出精力,还要付出一份心境.--仅以<Owin+ASP.NET Identity浅析系列>来祭奠那逝去的…… OK,用户角色实现后,我们回 ...
- Owin+ASP.NET Identity浅析系列(四)实现用户角色
在今天,读书有时是件“麻烦”事.它需要你付出时间,付出精力,还要付出一份心境.--仅以<Owin+ASP.NET Identity浅析系列>来祭奠那逝去的…… 通过Owin+ASP.NET ...
- Owin+ASP.NET Identity浅析系列(三)框架结构分析
在今天,读书有时是件“麻烦”事.它需要你付出时间,付出精力,还要付出一份心境.--仅以<Owin+ASP.NET Identity浅析系列>来祭奠那逝去的…… 前两篇博客仅仅说了下功能如何 ...
- Owin+ASP.NET Identity浅析系列(二)扩展用户属性
在今天,读书有时是件“麻烦”事.它需要你付出时间,付出精力,还要付出一份心境.--仅以<Owin+ASP.NET Identity浅析系列>来祭奠那逝去的…… 上一篇博客讲了用户登录注册问 ...
- Owin+ASP.NET Identity浅析系列(一)用户登录注册
在今天,读书有时是件“麻烦”事.它需要你付出时间,付出精力,还要付出一份心境.--仅以<Owin+ASP.NET Identity浅析系列>来祭奠那逝去的…… 使用VS2015创建MVC项 ...
- asp.net IHttpHandler浅析
在asp.net程序中,我们可以通过配置url的path路径的方式,将某个path路径下的请求交给指定的IHttpHandler去处理,这便是对request请求进行编程. 一.新建一个framewo ...
- Asp.Net Mvc: 浅析TempData机制
一. Asp.Net Mvc中的TempData 在Asp.Net Mvc框架的ControllerBase中存在一个叫做TempData的Property,它的类型为TempDataDictiona ...
- ASP.NET IHttpModule IHttpHandler IHttpHandlerFactory 拦截请求
先来看看代码,拦截所有Http请求类.下面包含了两种类的集成 IHttpModule IHttpHandlerFactory using System; using System.Collection ...
随机推荐
- Java线程基础(一)
说在前面,经过一段学习过后,自己发觉线程在Java中占有举足轻重的地位,总觉得如此复杂的线程知识点一定要好好理清才好消化,因而有了这篇文章. 但因鄙人资历尚浅,如有遗漏错误之处还请广大网友不吝赐教. ...
- Python网络爬虫入门篇
1. 预备知识 学习者需要预先掌握Python的数字类型.字符串类型.分支.循环.函数.列表类型.字典类型.文件和第三方库使用等概念和编程方法. 2. Python爬虫基本流程 a. 发送请求 使用 ...
- requirejs官网
http://www.requirejs.cn/
- Java的实例化
实例化是什么 1.在Java中,使用已经定义好的类,创建该类对象的过程称为"实例化". 2.实例化就是在堆中分配内存的过程,分配的内存即对象. 3.只有实例化后的对象,才能访问到类 ...
- 用Xshell在centos7下安装lnmp服务
虚拟机已创建好,本机已安装Xshell 一.准备工作:安装常用工具 1.1 yum install -y vim 备注:-y是同意安装过程中的询问,不被询问打断安装 vim:vim是一个类似于Vi的 ...
- vue使用$http服务端收不到参数
老夫子我正在憋方案书,听到身后传来细软的声音:“李哥,我这有个Bug调了很长时间了,您能帮我看一下吗?”.说这话的是我的好朋友,公司新来的前端小妹伊万卡.我起身向她走去,看到因长时间调试Bug漂亮的脸 ...
- 意外get接近完美的黑苹果 (UEFI + GPT)
本人大学生一枚,对于高大上的 MAC OS 只能是摸摸口袋 咽咽口水啦.听说黑苹果,就是安装在普通的 pc 上的 MAC系统,那么对应的苹果电脑上的 MAC OS 系统就为白苹果了. 个人也想啃一口黑 ...
- android 百度地图 定位获取位置失败 62错误
一切正常步骤进行但是还是没有获得定位,得到的坐标总是49E.xxxx,错误代码总是62 总是以为代码.或jar包.或还有什么权限没给.搞了好久,十分郁闷.在控制台上又没有什么具体的错误提示 经过无数次 ...
- Vivado SDK ,调用math.h函数的时候出现 undefined reference to `xxx' ,解决方案
在Vivado SDK进行软件设计的时候,如调用math.h函数的时候出现 undefined reference to `sqrt' ,原因有以下情况: 1.没有添加需调用的头文件 解决方案:添加对 ...
- java.lang.ClassNotFoundException: javax.servlet.SessionCookieConfig
使用 MockMvc 模拟进行单元测试时出现以下的错误,网上看到的资料应该是说Spring4.0需要servlet3.0的支持? 在pom.xml更改servlet的版本依赖后即可