`

HttpModule

阅读更多
HttpModule & HttpHandle TE>收藏 TE>

ASP.NET对请求处理的过程:

当请求一个*.aspx文件的时候,这个请求会被inetinfo.exe进程截获,它判断文件的后缀(aspx)之后,将这个请求转交给ASPNET_ISAPI.dll,ASPNET_ISAPI.dll会通过http管道(Http PipeLine)将请求发送给ASPNET_WP.exe进程,在ASPNET_WP.exe进程中通过HttpRuntime来处理这个请求,处理完毕将结果返回客户端。

    inetinfo.exe进程:是www服务的进程,IIS服务和ASPNET_ISAPI.DLL都寄存在此进程中。

    ASPNET_ISAPI.DLL:是处理.aspx文件的win32组件。其实IIS服务器是只能识别.html文件的,当IIS服务器发现被请求的文件是.aspx文件时,IIS服务器将其交给aspnet_isapi.dll来处理。

    aspnet_wp.exe进程:ASP.NET框架进程,提供.net运行的托管环境,.net的CLR(公共语言运行时)就是寄存在此进程中。

ASP.NET Framework处理一个Http Request的流程:

    HttpRequest-->inetinfo.exe-->ASPNET_ISAPI.dll-->ASPNET_WP.exe-->HttpRuntime-->HttpApplication Factory-->HttpApplication-->HttpModule-->HttpHandler Factory-->HttpHandler-->HttpHandler.ProcessRequest()

ASP.NET请求处理过程是基于管道模型的,这个管道模型是由多个HttpModule和HttpHandler组成,ASP.NET把http请求依次传递给管道中各个HttpModule,最终被HttpHandler处理,处理完成后,再次经过管道中的HTTP模块,把结果返回给客户端。我们可以在每个HttpModule中都可以干预请求的处理过程。


注意:在http请求的处理过程中,只能调用一个HttpHandler,但可以调用多个HttpModule。

当请求到达HttpModule的时候,系统还没有对这个请求真正处理,但是我们可以在这个请求传递到处理中心(HttpHandler)之前附加一些其它信息,或者截获的这个请求并作一些额外的工作,也或者终止请求等。在HttpHandler处理完请求之后,我们可以再在相应的HttpModule中把请求处理的结果进行再次加工返回客户端。

    HTTP模块可以向System.Web.HttpApplication对象注册下面一系列事件:

        AcquireRequestState 当ASP.NET运行时准备好接收当前HTTP请求的对话状态的时候引发这个事件。

        AuthenticateRequest 当ASP.NET 运行时准备验证用户身份的时候引发这个事件。

        AuthorizeRequest 当ASP.NET运行时准备授权用户访问资源的时候引发这个事件。

        BeginRequest 当ASP.NET运行时接收到新的HTTP请求的时候引发这个事件。

        Disposed 当ASP.NET完成HTTP请求的处理过程时引发这个事件。

        EndRequest 把响应内容发送到客户端之前引发这个事件。

        Error 在处理HTTP请求的过程中出现未处理异常的时候引发这个事件。

        PostRequestHandlerExecute 在HTTP处理程序结束执行的时候引发这个事件。

        PreRequestHandlerExecute 在ASP.NET开始执行HTTP请求的处理程序之前引发这个事件。在这个事件之后,ASP.NET 把该请求转发给适当的HTTP处理程序。

        PreSendRequestContent 在ASP.NET把响应内容发送到客户端之前引发这个事件。这个事件允许我们在内容到达客户端之前改变响应内容。我们可以使用这个事件给页面输出添加用于所有页面的内容。例如通用菜单、头信息或脚信息。

        PreSendRequestHeaders 在ASP.NET把HTTP响应头信息发送给客户端之前引发这个事件。在头信息到达客户端之前,这个事件允许我们改变它的内容。我们可以使用这个事件在头信息中添加cookie和自定义数据。

        ReleaseRequestState 当ASP.NET结束所搜有的请求处理程序执行的时候引发这个事件。

        ResolveRequestCache 我们引发这个事件来决定是否可以使用从输出缓冲返回的内容来结束请求。这依赖于Web应用程序的输出缓冲时怎样设置的。

        UpdateRequestCache 当ASP.NET完成了当前的HTTP请求的处理,并且输出内容已经准备好添加给输出缓冲的时候,引发这个事件。这依赖于Web应用程序的输出缓冲是如何设置的。
HttpModule生命周期示意图


    下面是事件的触发顺序:




   BeginRequest和PreRequestHandlerExecute之间的事件是在服务器执行HttpHandler处理之前触发。

    PostRequestHandlerExecute和PreSendRequestContent之间的事件是在服务器执行Handler处理之后触发。

如果定义了多个HttpModule,在web.config文件中引入自定义HttpModule的顺序就决定了多个自定义HttpModule在处理一个HTTP请求的接管顺序。





  • 大小: 5 KB
  • 大小: 59 KB
  • 大小: 39.3 KB
分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    HttpModule伪静态实例

    这个【HttpModule伪静态实例】是一个用于演示如何通过HttpModule实现URL伪静态的技术方案,这对于提升网站SEO(搜索引擎优化)和用户体验具有重要意义。 首先,我们来看看什么是URL伪静态。静态URL通常是指以`....

    RegisterHttpModule 注册HttpModule

    `RegisterHttpModule`方法是用于动态注册HttpModule的一种技术,这使得我们能够在不修改Web.config配置文件的情况下,实现HttpModule的添加和管理。 HttpModule本身是一种特殊的类,它继承自`System.Web....

    HttpModule和httpHandler学习例子

    **HttpModule** HttpModule是ASP.NET中的一个可插拔组件,它在应用程序处理HTTP请求生命周期的早期阶段介入。HttpModule可以注册事件处理器,监听特定的HTTP事件,如BeginRequest、EndRequest等。通过这些事件,模块...

    利用httpmodule统计页面访问量

    知识点:利用HTTPModule统计页面访问量 在深入探讨如何利用HTTPModule来统计页面访问量之前,我们首先需要理解几个核心概念。HTTPModule是ASP.NET框架的一部分,它允许开发者在请求处理过程中插入自定义代码,从而...

    采用HttpModule技术进行以Ajax 方式的客户端回调处理类库源代码

    在这个特定的源代码库中,我们看到的是一个利用HttpModule实现Ajax客户端回调处理的实例。让我们深入了解一下这个技术及其应用场景。 1. **HttpModule的基本概念** HttpModule是ASP.NET中的一类特殊组件,它们可以...

    ASP.NET架构详解HttpHandler和HttpModule高清PDF文字版

    在这个主题中,我们将深入探讨ASP.NET架构中的两个关键组件:HttpHandler和HttpModule。 **HttpHandler**是ASP.NET处理HTTP请求的核心组件。每个HTTP请求都会被路由到一个特定的HttpHandler,它负责处理特定类型的...

    HTTPmodule操作cookie的方法demo

    CookieEncryption_Solution HTTPmodule操作cookie的方法demo

    c#基于HttpModule的用户身份验证

    c#基于HttpModule的用户身份验证 c#基于HttpModule的用户身份验证 c#基于HttpModule的用户身份验证 c#基于HttpModule的用户身份验证c#

    net实现定时任务(Cache+HttpModule)

    ### .NET 实现定时任务(Cache + HttpModule) 在.NET框架中实现定时任务可以通过多种方式完成,例如使用`System.Timers.Timer`、Windows服务、后台线程等。本文介绍一种较为特殊的实现方式:利用`HttpModule`和`...

    c#httpModule中重写url

    c#httpModule中重写url

    HttpModule 请求处理生命周期图

    HttpModule请求处理生命周期图,很清晰明了,值得看看

    介绍Asp.net HttpModule

    HttpModule对于深入理解Asp.Net的工作原理至关重要,因为它们在处理页面请求时扮演着重要角色。 首先,我们来看一下HttpModule的基本概念。一个HttpModule是一个实现了IHttpModule接口的类,这个接口有两个主要方法...

    Community Server专题三:HttpModule

    ### Community Server专题三:HttpModule #### IIS与动态页面处理机制 首先,为了更好地理解HttpModule的作用,我们需要从整体上了解IIS是如何处理请求的。IIS(Internet Information Services)是一个由微软提供...

    HttpModule检验Session值

    HttpModule可以用来执行各种任务,例如身份验证、日志记录、缓存管理等。在本场景中,我们将讨论如何利用HttpModule来检验Session值和Cookie值,以实现在项目中的身份验证功能。 首先,我们需要了解HttpModule的...

    关于HttpHandler与HttpModule的理解和应用方法

    在深入理解HttpHandler和HttpModule之前,我们需要明确两者在***应用程序中所扮演的角色以及它们是如何运作的。***是构建动态网页和网络应用程序的一个框架,其中处理请求的方式是通过一个称为请求管线的机制。 1. ...

    HttpModule实现同时一人在线.rar

    在标题"HttpModule实现同时一人在线.rar"中,我们讨论的核心是利用HttpModule来限制同一时间只有一个用户在线。这通常涉及到会话管理、用户身份验证以及并发控制等概念。 HttpModule是IIS(Internet Information ...

    测试代码:Asp.Net底层解析(四)——应用程序生命周期与HttpModule

    本文将深入解析HttpModule的工作原理,并结合提供的“Dragon_HttpModule”测试代码,来探讨其在应用程序生命周期中的作用。 首先,我们理解一下HttpModule的基本概念。HttpModule是ASP.NET框架中的一种中间件,它是...

    HttpModule二级域名 C#.Net实例代码

    在本实例中,我们关注的是如何使用HttpModule处理二级域名的路由和定向。 首先,了解HttpModule的工作原理至关重要。每当一个HTTP请求到达IIS服务器时,IIS会调用已注册的HttpModule链中的每个模块的BeginRequest...

    Asp.net使用HttpModule压缩并删除空白Html请求的实现代码

    为了实现响应压缩,开发人员需要在HttpModule中处理HttpApplication对象的EndRequest事件。在该事件中,可以检查响应流,然后根据浏览器支持的压缩类型,决定是使用Gzip压缩还是Deflate压缩。为了实现这一功能,...

Global site tag (gtag.js) - Google Analytics