在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浅析的更多相关文章

  1. Asp.Net Mvc: 浅析TempData机制(转发 作者: Tristan G )

    Asp.Net Mvc: 浅析TempData机制 环境: Windows 2008, VS 2008 SP1, Asp.Net Mvc 1.0 --------------------------- ...

  2. Owin+ASP.NET Identity浅析系列(五)接入第三方登录

    在今天,读书有时是件“麻烦”事.它需要你付出时间,付出精力,还要付出一份心境.--仅以<Owin+ASP.NET Identity浅析系列>来祭奠那逝去的…… OK,用户角色实现后,我们回 ...

  3. Owin+ASP.NET Identity浅析系列(四)实现用户角色

    在今天,读书有时是件“麻烦”事.它需要你付出时间,付出精力,还要付出一份心境.--仅以<Owin+ASP.NET Identity浅析系列>来祭奠那逝去的…… 通过Owin+ASP.NET ...

  4. Owin+ASP.NET Identity浅析系列(三)框架结构分析

    在今天,读书有时是件“麻烦”事.它需要你付出时间,付出精力,还要付出一份心境.--仅以<Owin+ASP.NET Identity浅析系列>来祭奠那逝去的…… 前两篇博客仅仅说了下功能如何 ...

  5. Owin+ASP.NET Identity浅析系列(二)扩展用户属性

    在今天,读书有时是件“麻烦”事.它需要你付出时间,付出精力,还要付出一份心境.--仅以<Owin+ASP.NET Identity浅析系列>来祭奠那逝去的…… 上一篇博客讲了用户登录注册问 ...

  6. Owin+ASP.NET Identity浅析系列(一)用户登录注册

    在今天,读书有时是件“麻烦”事.它需要你付出时间,付出精力,还要付出一份心境.--仅以<Owin+ASP.NET Identity浅析系列>来祭奠那逝去的…… 使用VS2015创建MVC项 ...

  7. asp.net IHttpHandler浅析

    在asp.net程序中,我们可以通过配置url的path路径的方式,将某个path路径下的请求交给指定的IHttpHandler去处理,这便是对request请求进行编程. 一.新建一个framewo ...

  8. Asp.Net Mvc: 浅析TempData机制

    一. Asp.Net Mvc中的TempData 在Asp.Net Mvc框架的ControllerBase中存在一个叫做TempData的Property,它的类型为TempDataDictiona ...

  9. ASP.NET IHttpModule IHttpHandler IHttpHandlerFactory 拦截请求

    先来看看代码,拦截所有Http请求类.下面包含了两种类的集成 IHttpModule IHttpHandlerFactory using System; using System.Collection ...

随机推荐

  1. objectarx 把当前图形输出

    方法1: AcDbDatabase *pdb; acdbCurDwg()->wblock(pdb); pdb->saveAs(str); pdb->closeInput(true); ...

  2. .NET/C# 反射的的性能数据,以及高性能开发建议(反射获取 Attribute 和反射调用方法)——转载

    原文链接:https://blog.walterlv.com/post/dotnet-high-performance-reflection-suggestions.html ***** 大家都说反射 ...

  3. react生命周期和组件生命周期

    React的组件在第一次挂在的时候首先获取父组件传递的props,接着获取初始的state值,接着经历挂载阶段的三个生命周期函数,也就是ComponentWillMount,render,Compon ...

  4. 浏览器输入URL后,HTTP请求返回的完整过程

    1.Redirect,跳转    浏览器记录里这个地址永久跳转的新地址,浏览器先去判断需不需要跳转 2.Application cache ,应用缓存    浏览器看请求的资源是否有缓存 3.DNS解 ...

  5. 【Mac】【创建钥匙串】

    1 Mac在钥匙串创建系统证书失败 https://blog.csdn.net/lllkey/article/details/79423596 问题: 在Eclipse的Debug,使用gdb的时候, ...

  6. heartbeat 非联网安装(通过配置本地yum文件库安装heartbeat)

    软件环境:centos6.5 一.下载rpm包 首先找一台联网的centos6.5机器 安装epel扩展源: yum install -y epel-release 安装yum-plugin-down ...

  7. 前后端分离之【接口文档管理及数据模拟工具docdoc与dochelper】

    前后端分离的常见开发方式是: 后端:接收http请求->根据请求url及params处理对应业务逻辑->将处理结果序列化为json返回 前端:发起http请求并传递相关参数->获取返 ...

  8. Jenkins之定时构建

    参考文章:https://blog.csdn.net/ZZY1078689276/article/details/77520441 第一个*表示分钟,取值0~59 第二个*表示小时,取值0~23 第三 ...

  9. Powerdesigner设计表生成SQL脚本(带有注释)

    网上搜索查阅地址:https://www.2cto.com/database/201704/628659.html 步骤: Powerdesigner中选择Tools---->Excute co ...

  10. HDU 5299 Circles Game

    HDU 5299 思路: 圆扫描线+树上删边博弈 圆扫描线有以下四种情况,用set维护扫描线与圆的交点,重载小于号 代码: #pragma GCC optimize(2) #pragma GCC op ...