asp.net提供httpmodules作为一种hook into请求和响应操作的方法,
httpModules参与到应用程序一级中,在请求传入服务器时就可以获取它,并接着在响应返回浏览器时再次触发.httpModules对象可以获取一个httpApplication对象的引用,并将事件处理器绑定到应用程序的事件中.
使用httphandlers可以通过获得当前httpContext的引用来处理一个对特定文件拓展名或者指定路径的http请求。
他们的顺序是httpmodules——>httphandlers——>httpmodules
说通俗一点就是
1.httpmodules是应用程序级的,它可以处理每次http请求的不同阶段的事件
如:BeginRequest(在 ASP.NET 响应请求时作为 HTTP 执行管线链中的第一个事件发生。 )
EndRequest(在 ASP.NET 响应请求时作为 HTTP 执行管线链中的最后事件发生。 )
PreRequestHandlerExecute(在 ASP.NET Handler初始化完成,并且在页面初始化前发生 )
2.httphandlers一般是页面级的(每次都是一次http请求),他实际就是处理每次http请求的本身,
.net页面(或者其它后缀名,想处理http请求的)本身也是继承IHttpHandler的,还有比如.ashx页也是一个专门处理http请求的文件,所以系统又允许我们继承IHttpHandler
并通过扩展 public void ProcessRequest (HttpContext context) 方法来自定义一些http请求的处理,它的功能就是处理Http请求的,可以说httpmodules
是对它的一次应用程序级的扩展,处理他的(前后左右)但他还是核心
举个例子:可能不太恰当(人去超市,推车从入口进去,买完东西结帐从出口出来)
首先人买东西是核心,是一次http请求,到超市门口,httpmodules提供了一辆车(当然也可以不要,但是不能带商品进去,所以车可以自定义,但商品不能自定义),然后到
超市里,逛超市就是HttpHandler是一次http请求处理,出来结帐httpmodules又提供结帐功能然后走人。处理完成。
在这里说一下,大家一定要清楚一件事,初学.net不要以为http请求是依赖与aspx页,http请求不依赖与.net程序本身,.net只不过根据它的标准做了
一个处理程序HttpHandler所以,处理http请求可以是任何东西,.net的webform模式只不过是其中之一还有其它像mvc也是一种(比如上边的例子,买东西是http请求,你上超市是买东西,上仓卖是买东西,上市场也是买东西,所不同的只是处理平台不同) ,而且aspx页和它的后台aspx.cs页也没有必然的联系,他们也是通过中间的映射和一系列标准联系起来的,
codefile页也不是必须提交到他的后台页改成其它的处理http请求的地方也行,比如.ashx页,但是这样就是简单的http请求了,不是事件驱动的了,aspx.cs页实际就是把http请求封装扩展了一次,但是处理的还是最基础的http请求
3.关于Global.asax和 httpmodules
硬要说关系,Application对象就是从Global.asax产生的,httpmodules在Global.asax之后,Global.asax比httpmodules多出一些注册事件(比如httpmodules就无法注册session事件),但是Global.asax属于系统级的文件,httpmodules属于一个类,可以说httpmodules重用性好。
整体的顺序是
http请求——>IIS(web服务器)——>运行时——>Global.asax(Application)——>httpmodules——>HttpHandler
<———————————————————————————————————————————————————再回去
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现