首页 | 互联网 | IT动态 | IT培训 | Cisco | Windows | Linux | Java | .Net | Oracle | 软件测试 | C/C++ | 嵌入式开发 | 存储世界 | 服务器
网络设备 | IDC | 安全 | 求职招聘 | 数字网校 | 网页设计 | 平面设计 | 技术专题 | 电子书下载 | 教学视频 | 源码下载 | 搜索 | 博客 | 论坛
中国IT实验室Dotnet频道
中国IT教育
Google
首页 ASP.NET  C#  XML/WebService ADO.NET VC.NET VB.NET .NET 资讯动态 专题 RSS订阅 讨论 下载
您现在的位置: 中国IT实验室 >> Dotnet >> ASP.NET >> 正文

Asp.Net页面执行流程分析

五、HttpModule
在系统web.config中默认的配置有:
Code
    <httpModules>
      <add name="OutputCache" type="System.Web.Caching.OutputCacheModule"/>
      <add name="Session" type="System.Web.SessionState.SessionStateModule"/>
      <add name="WindowsAuthentication" type="System.Web.Security.WindowsAuthenticationModule"/>
      <add name="FormsAuthentication" type="System.Web.Security.FormsAuthenticationModule"/>
      <add name="PassportAuthentication" type="System.Web.Security.PassportAuthenticationModule"/>
      <add name="RoleManager" type="System.Web.Security.RoleManagerModule"/>
      <add name="UrlAuthorization" type="System.Web.Security.UrlAuthorizationModule"/>
      <add name="FileAuthorization" type="System.Web.Security.FileAuthorizationModule"/>
      <add name="AnonymousIdentification" type="System.Web.Security.AnonymousIdentificationModule"/>
      <add name="Profile" type="System.Web.Profile.ProfileModule"/>
      <add name="ErrorHandlerModule" type="System.Web.Mobile.ErrorHandlerModule, System.Web.Mobile, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
      <add name="ServiceModel" type="System.ServiceModel.Activation.HttpModule, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
    </httpModules>
基本使用方法可以参见我的上一篇文章

六、HttpHandlerFactory、HttpHandler
这两个对象在web.config中的配置方法是相同的,默认配置有:
Code
     <add path="*.rules" verb="*" type="System.Web.HttpForbiddenHandler" validate="true"/>
      <add path="*.xoml" verb="*" type="System.ServiceModel.Activation.HttpHandler, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" validate="false"/>
      <add path="trace.axd" verb="*" type="System.Web.Handlers.TraceHandler" validate="true"/>
      <add path="WebResource.axd" verb="GET" type="System.Web.Handlers.AssemblyResourceLoader" validate="true"/>
      <add path="*.axd" verb="*" type="System.Web.HttpNotFoundHandler" validate="true"/>
      <add path="*.aspx" verb="*" type="System.Web.UI.PageHandlerFactory" validate="true"/>
      <add path="*.ashx" verb="*" type="System.Web.UI.SimpleHandlerFactory" validate="true"/>
      <add path="*.asmx" verb="*" type="System.Web.Services.Protocols.WebServiceHandlerFactory, System.Web.Services, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" validate="false"/>
      <add path="*.rem" verb="*" type="System.Runtime.Remoting.Channels.Http.HttpRemotingHandlerFactory, System.Runtime.Remoting, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" validate="false"/>
      <add path="*.soap" verb="*" type="System.Runtime.Remoting.Channels.Http.HttpRemotingHandlerFactory, System.Runtime.Remoting, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" validate="false"/>
      <add path="*.asax" verb="*" type="System.Web.HttpForbiddenHandler" validate="true"/>
      <add path="*.ascx" verb="*" type="System.Web.HttpForbiddenHandler" validate="true"/>
      <add path="*.master" verb="*" type="System.Web.HttpForbiddenHandler" validate="true"/>
      <add path="*.skin" verb="*" type="System.Web.HttpForbiddenHandler" validate="true"/>
      <add path="*.browser" verb="*" type="System.Web.HttpForbiddenHandler" validate="true"/>
      <add path="*.sitemap" verb="*" type="System.Web.HttpForbiddenHandler" validate="true"/>
      <add path="*.dll.config" verb="GET,HEAD" type="System.Web.StaticFileHandler" validate="true"/>
      <add path="*.exe.config" verb="GET,HEAD" type="System.Web.StaticFileHandler" validate="true"/>
      <add path="*.config" verb="*" type="System.Web.HttpForbiddenHandler" validate="true"/>
      <add path="*.cs" verb="*" type="System.Web.HttpForbiddenHandler" validate="true"/>
      <add path="*.csproj" verb="*" type="System.Web.HttpForbiddenHandler" validate="true"/>
      <add path="*.vb" verb="*" type="System.Web.HttpForbiddenHandler" validate="true"/>
      <add path="*.vbproj" verb="*" type="System.Web.HttpForbiddenHandler" validate="true"/>
      <add path="*.webinfo" verb="*" type="System.Web.HttpForbiddenHandler" validate="true"/>
      <add path="*.licx" verb="*" type="System.Web.HttpForbiddenHandler" validate="true"/>
      <add path="*.resx" verb="*" type="System.Web.HttpForbiddenHandler" validate="true"/>
      <add path="*.resources" verb="*" type="System.Web.HttpForbiddenHandler" validate="true"/>
      <add path="*.mdb" verb="*" type="System.Web.HttpForbiddenHandler" validate="true"/>
      <add path="*.vjsproj" verb="*" type="System.Web.HttpForbiddenHandler" validate="true"/>
      <add path="*.java" verb="*" type="System.Web.HttpForbiddenHandler" validate="true"/>
      <add path="*.jsl" verb="*" type="System.Web.HttpForbiddenHandler" validate="true"/>
      <add path="*.ldb" verb="*" type="System.Web.HttpForbiddenHandler" validate="true"/>
      <add path="*.ad" verb="*" type="System.Web.HttpForbiddenHandler" validate="true"/>
      <add path="*.dd" verb="*" type="System.Web.HttpForbiddenHandler" validate="true"/>
      <add path="*.ldd" verb="*" type="System.Web.HttpForbiddenHandler" validate="true"/>
      <add path="*.sd" verb="*" type="System.Web.HttpForbiddenHandler" validate="true"/>
      <add path="*.cd" verb="*" type="System.Web.HttpForbiddenHandler" validate="true"/>
      <add path="*.adprototype" verb="*" type="System.Web.HttpForbiddenHandler" validate="true"/>
      <add path="*.lddprototype" verb="*" type="System.Web.HttpForbiddenHandler" validate="true"/>
      <add path="*.sdm" verb="*" type="System.Web.HttpForbiddenHandler" validate="true"/>
      <add path="*.sdmDocument" verb="*" type="System.Web.HttpForbiddenHandler" validate="true"/>
      <add path="*.mdf" verb="*" type="System.Web.HttpForbiddenHandler" validate="true"/>
      <add path="*.ldf" verb="*" type="System.Web.HttpForbiddenHandler" validate="true"/>
      <add path="*.exclude" verb="*" type="System.Web.HttpForbiddenHandler" validate="true"/>
      <add path="*.refresh" verb="*" type="System.Web.HttpForbiddenHandler" validate="true"/>
      <add path="*.svc" verb="*" type="System.ServiceModel.Activation.HttpHandler, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" validate="false"/>
      <add path="*" verb="GET,HEAD,POST" type="System.Web.DefaultHttpHandler" validate="true"/>
      <add path="*" verb="*" type="System.Web.HttpMethodNotAllowedHandler" validate="true"/>
    </httpHandlers>
要注意的是相同的后缀名配置多次的话,后面的配置会把前面的覆盖。

这里我们重点看一下aspx的配置:System.Web.UI.PageHandlerFactory
这是一个HttpHandlerFactory对象,根据不同的Page生成不同的HttpHandler对象(我们自己的Page页面都是一个IHttpHandler):
    Page page = BuildManager.CreateInstanceFromVirtualPath(virtualPath, typeof(Page), context, true, true) as Page;
    if (page == null)
    {
        return null;
    }
    page.TemplateControlVirtualPath = virtualPath;
    return page;
这里会调用web.config中的buildProviders配置编译页面:
Code
<buildProviders>
        <add extension=".aspx" type="System.Web.Compilation.PageBuildProvider"/>
        <add extension=".ascx" type="System.Web.Compilation.UserControlBuildProvider"/>
        <add extension=".master" type="System.Web.Compilation.MasterPageBuildProvider"/>
        <add extension=".asmx" type="System.Web.Compilation.WebServiceBuildProvider"/>
        <add extension=".ashx" type="System.Web.Compilation.WebHandlerBuildProvider"/>
        <add extension=".soap" type="System.Web.Compilation.WebServiceBuildProvider"/>
        <add extension=".resx" type="System.Web.Compilation.ResXBuildProvider"/>
        <add extension=".resources" type="System.Web.Compilation.ResourcesBuildProvider"/>
        <add extension=".wsdl" type="System.Web.Compilation.WsdlBuildProvider"/>
        <add extension=".xsd" type="System.Web.Compilation.XsdBuildProvider"/>
        <add extension=".js" type="System.Web.Compilation.ForceCopyBuildProvider"/>
        <add extension=".lic" type="System.Web.Compilation.IgnoreFileBuildProvider"/>
        <add extension=".licx" type="System.Web.Compilation.IgnoreFileBuildProvider"/>
        <add extension=".exclude" type="System.Web.Compilation.IgnoreFileBuildProvider"/>
        <add extension=".refresh" type="System.Web.Compilation.IgnoreFileBuildProvider"/>
        <add extension=".xoml" type="System.ServiceModel.Activation.WorkflowServiceBuildProvider, System.WorkflowServices, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
        <add extension=".svc" type="System.ServiceModel.Activation.ServiceBuildProvider, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
      </buildProviders>

这样就可以进入我们的Page执行了,大的执行顺序可以参见第四部分的描述,它也就是一个HttpHandler.

 

上一页  [1] [2] 

【责编:Ken】

中国IT教育

相关产品和培训
文章评论
 友情推荐链接
 认证培训
 专题推荐

 ·关于Java框架技术专题
 ·XML全攻略技术专题
 ·JAVA开源技术介绍专题
 ·Java嵌入式开发之J2ME技术专题
 ·超前体验 Oracle 11g的5个新特性…
 ·揭密使用VB.NET的五个实用技巧
 ·Oracle和SQL Server常用函数对比专题…
 ·展现C#世界 C#程序设计专题…
 ·Java入门 Tomcat的配置技巧精华专题…
 ·Oracle RMAN物理备份技术详解…
 今日更新
 社区讨论
 博客论点
 频道精选
 Dotnet频道相关导航