HTML5技术

ASP.NET 运行时详解 揭开请求过程神秘面纱 - heavi(9)

字号+ 作者:H5之家 来源:博客园 2015-12-30 17:08 我要评论( )

Init的第二件事就是把OnEnter方法注册到BeginRequest管道步骤,OnEnter方法直接调用UrlMappingRewritePath方法,所以,我们可以直接分析UrlMappingRewritePath方法代码: static void UrlMappingRewritePath(HttpCo

    Init的第二件事就是把OnEnter方法注册到BeginRequest管道步骤,OnEnter方法直接调用UrlMappingRewritePath方法,所以,我们可以直接分析UrlMappingRewritePath方法代码: 

static void UrlMappingRewritePath(HttpContext context) { HttpRequest request = context.Request; UrlMappingsSection urlMappings = RuntimeConfig.GetAppConfig().UrlMappings; string path = request.Path; string str2 = null; string queryStringText = request.QueryStringText; if (!string.IsNullOrEmpty(queryStringText)) { str2 = urlMappings.HttpResolveMapping(path + + queryStringText); } if (str2 == null) { str2 = urlMappings.HttpResolveMapping(path); } if (!string.IsNullOrEmpty(str2)) { context.RewritePath(str2, false); } }

    代码比较简单,首先从配置文件中获取urlMappings节点信息,然后调用HttpResolveMapping方法,匹配请求的全路径url(包括路径和参数)是否有对应的mappedUrl。如果没有,再匹配请求的路径path是否有对应的mappedUrl。匹配成功,调用context.RewirtePath方法设置请求的路径为mappedUrl。

11. ServiceHttpModule

    ServiceHttpModule没有执行任何操作。用户向后扩展

12. UrlRoutingModule

    UrlRoutingModule在所有管道中起到承上启下的作用,Http请求的IHttpHandler就在是这里生成的。所在管道步骤:ResolveRequestCache。Init方法把UrlRoutingModule中的OnApplicationPostResolveRequestCache方法注册到ResolveRequestCache管道步骤。
    OnApplicationPostResolveRequestCache方法直接调用了PostResolveRequestCache方法,PostResolveRequestCache代码如下:

PostResolveRequestCache(HttpContextBase context) { //根据上下文从路由集合中获取对应路由数据 RouteData routeData = this.RouteCollection.GetRouteData(context); if (routeData != null) { //获取路由处理器 IRouteHandler routeHandler = routeData.RouteHandler; if (!(routeHandler is StopRoutingHandler)) { RequestContext requestContext = new RequestContext(context, routeData); context.Request.RequestContext = requestContext; //获取IHttpHandler IHttpHandler httpHandler = routeHandler.GetHttpHandler(requestContext); //重定向上下文中的httpHandler context.RemapHandler(httpHandler); } } }

    上面的代码已经是一目了然,清清楚楚的了。首先从路由集合中获取路由数据routeData,然后从routeData获取RouteHandler,接下来调用routeHandler的GetHttpHandler方法获取IHttpHandler实例。最后,调用上下文context的RemapHandler方法重定向httpHandler。下面是整个执行的流程图:

     

image

13. ScriptModule

    ScriptModule没有执行任何操作。

 

    如果本篇内容对大家有帮助,请点击页面右下角的关注。如果觉得不好,也欢迎拍砖。你们的评价就是博主的动力!下篇内容,敬请期待!

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • 如何在 ASP.NET Core 中发送邮件 - Savorboard

    如何在 ASP.NET Core 中发送邮件 - Savorboard

    2017-05-02 08:02

  • 十二个 ASP.NET Core 例子 - Savorboard

    十二个 ASP.NET Core 例子 - Savorboard

    2017-04-27 16:01

  • ASP.NET MVC5请求管道和生命周期 - 雪飞鸿

    ASP.NET MVC5请求管道和生命周期 - 雪飞鸿

    2017-04-24 08:04

  • ASP.NET Core MVC 源码学习:详解 Action 的激活 - Savorboard

    ASP.NET Core MVC 源码学习:详解 Action 的激活 - Savorboard

    2017-04-14 13:04

网友点评
P