HttpMoudle实现用户身份验证

 
查看文章
 
HttpMoudle实现用户身份验证
2009-12-04 19:37

参考自小白.net的HttpMoudle实现用户身份验证

下表列出了在 IIS 7.0 集成模式下运行的 ASP.NET 应用程序生命周期的各个阶段。

阶段

说明

发出一个对应用程序资源的请求。

ASP.NET 应用程序的生命周期以浏览器向 Web 服务器发送请求为起点。

在 IIS 7.0 经典模式下以及在 IIS 6.0 中,ASP.NET 请求管道与 Web 服务器管道分离。模块仅应用于路由到 ASP.NET ISAPI 扩展的请求。如果请求的资源类型的文件扩展名未显式映射到 ASP.NET,则不会为该请求调用 ASP.NET 功能,因为 ASP.NET 运行库没有处理该请求。

而在 IIS 7.0 集成模式下,由一个统一的管道处理所有请求。当集成管道收到请求时,该请求将经历所有请求共有的一些阶段。这些阶段由 RequestNotification 枚举表示。所有请求都可以配置为使用 ASP.NET 功能,因为该功能封装在可以访问请求管道的托管代码模块中。例如,即使 .htm 文件扩展名未显式映射到 ASP.NET,对 HTML 页的请求仍会调用 ASP.NET 模块。这使您能对所有资源使用 ASP.NET 身份验证和授权。

统一管道接收对应用程序的第一个请求。

当统一管道接收对应用程序中的任何资源的第一个请求时,将为 ApplicationManager 类创建一个实例,该实例就是处理请求的应用程序域。应用程序域提供了应用程序之间全局变量的分离,并且使每个应用程序能够单独卸载。在应用程序域中,将为 HostingEnvironment 类创建一个实例,该实例提供对有关应用程序的信息(如存储该应用程序的文件夹的名称)的访问。

在第一个请求期间,如果需要,将对应用程序中的顶级项进行编译,其中包括 App_Code 文件夹中的应用程序代码。可以根据本主题后面的 IIS 7.0 中的托管代码模块中的说明,在 App_Code 文件夹中包含自定义模块和处理程序。

将为每个请求创建响应对象。

在创建了应用程序域并对 HostingEnvironment 对象进行了实例化之后,将创建并初始化应用程序对象,如 HttpContextHttpRequestHttpResponseHttpContext 类包含特定于当前应用程序请求的对象,如 HttpRequestHttpResponse 对象。HttpRequest 对象包含有关当前请求的信息,包括 Cookie 和浏览器信息。HttpResponse 对象包含发送到客户端的响应,其中包括所有呈现的输出和 Cookie。

下面是 IIS 6.0 和 IIS 7.0(在集成模式下,与 .NET Framework 3.0 或更高版本一起运行)之间的某些关键差异:

  • 可以使用 HttpResponse 对象的 SubStatusCode 属性,设置对失败请求跟踪有用的代码。有关更多信息,请参见 Troubleshooting Failed Requests Using Failed Request Tracing in IIS 7.0(使用 IIS 7.0 中的失败请求跟踪功能解决失败请求存在的问题)。

  • HttpResponse 对象的 Headers 属性提供对响应的响应头的访问。

  • 在一个事件处理程序处理多个 HttpApplication 事件时,可以使用 HttpContext 对象的两个属性 IsPostNotificationCurrentNotification

  • HttpRequest 对象的 HeadersServerVariables 属性支持写操作。

HttpApplication 对象分配给请求

初始化所有应用程序对象之后,将通过创建 HttpApplication 类的实例来启动应用程序。如果应用程序有 Global.asax 文件,则 ASP.NET 会创建从 HttpApplication 类派生的 Global.aspx 类的实例。然后使用该派生类来表示应用程序。

注意注意:

第一次在应用程序中请求 ASP.NET 页或进程时,将创建 HttpApplication 类的一个新实例。不过,为了尽可能提高性能,可对多个请求重复使用 HttpApplication 实例。

加载哪些 ASP.NET 模块(如 SessionStateModule)取决于应用程序从父应用程序继承的托管代码模块。这还取决于在应用程序的 Web.config 文件的配置节中配置了哪些模块。在应用程序的 Web.config 的 system.webServer 节中的 modules 元素中添加或移除模块。有关更多信息,请参见如何:为 IIS 7.0 配置 <system.webServer> 节

HttpApplication 管线处理请求。

在处理请求时,HttpApplication 类会执行下列任务。这些事件对于希望在引发关键请求管道事件时运行代码的网页开发人员很有用。如果是在开发自定义模块,并且希望对发往管道的所有请求都调用该模块,则这些事件也很有用。自定义模块实现 IHttpModule 接口。在 IIS 7.0 集成模式下,必须在模块的 Init 方法中注册事件处理程序。

  1. 对请求进行验证,将检查浏览器发送的信息,并确定其是否包含潜在恶意标记。有关更多信息,请参见 ValidateRequest脚本侵入概述

  2. 如果已在 Web.config 文件的 UrlMappingsSection 节中配置了任何 URL,则执行 URL 映射。

  3. 引发 BeginRequest 事件。

  4. 引发 AuthenticateRequest 事件。

  5. 引发 PostAuthenticateRequest 事件。

  6. 引发 AuthorizeRequest 事件。

  7. 引发 PostAuthorizeRequest 事件。

  8. 引发 ResolveRequestCache 事件。

  9. 引发 PostResolveRequestCache 事件。

  10. 引发 MapRequestHandler 事件。将根据所请求资源的文件扩展名,选择相应的处理程序。处理程序可以是本机代码模块,如 IIS 7.0 StaticFileModule,也可以是托管代码模块,如 PageHandlerFactory 类(它处理 .aspx 文件)。

  11. 引发 PostMapRequestHandler 事件。

  12. 引发 AcquireRequestState 事件。

  13. 引发 PostAcquireRequestState 事件。

  14. 引发 PreRequestHandlerExecute 事件。

  15. 为该请求调用合适的 IHttpHandler 类的 ProcessRequest 方法(或异步版 IHttpAsyncHandler..::.BeginProcessRequest)。例如,如果该请求针对某页,则当前的页实例将处理该请求。

  16. 引发 PostRequestHandlerExecute 事件。

  17. 引发 ReleaseRequestState 事件。

  18. 引发 PostReleaseRequestState 事件。

  19. 如果定义了 Filter 属性,则执行响应筛选。

  20. 引发 UpdateRequestCache 事件。

  21. 引发 PostUpdateRequestCache 事件。

  22. 引发 LogRequest 事件。

  23. 引发 PostLogRequest 事件。

  24. 引发 EndRequest 事件。

  25. 引发 PreSendRequestHeaders 事件。

  26. 引发 PreSendRequestContent 事件。

    注意注意:

    只有当应用程序在 IIS 7.0 集成模式下运行,并且与 .NET Framework 3.0 或更高版本一起运行时,才会支持 MapRequestHandlerLogRequest

原文地址:https://www.cnblogs.com/aion111/p/1661856.html