知识大全 ASP.NET MVC 4框架揭秘:Controller的激活与URL路由[1]

Posted

篇首语:高斋晓开卷,独共圣人语。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 ASP.NET MVC 4框架揭秘:Controller的激活与URL路由[1]相关的知识,希望对你有一定的参考价值。

ASP.NET MVC 4框架揭秘:Controller的激活与URL路由[1]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

     Controller的激活与URL路由

  ASP NET路由系统是HTTP请求抵达服务端的第一道屏障 它根据注册的路由规则对拦截的请求进行匹配并解析包含目标Controller和Action名称的路由信息 而当前ControllerBuilder具有用于激活Controller对象的ControllerFactory 现在看看两者是如何结合起来的

  通过第 章 URL路由 的介绍我们知道 ASP NET路由系统的核心是一个叫做UrlRoutingModule的HttpModule 路由的实现是它通过注册代表HttpApplication的PostResolveRequestCache事件对HttpHandler的动态映射来实现的 具体来说 它通过以RouteTable的静态属性Routes代表的全局路由表对请求进行匹配并得到一个RouteData对象 RouteData具有一个实现了接口IRouteHandler的属性RouteHandler 通过该属性的GetHttpHandler方法可以得到最终被映射到当前请求的HttpHandler对象

  对于ASP NET MVC应用来说 RouteData的RouteHandler属性类型为MvcRouteHandler 实现在MvcRouteHandler中的HttpHandler提供机制基本上(不是完全等同)可以通过如下的代码来体现 MvcRouteHandler维护着一个ControllerFactory对象 该对象可以在构造函数中指定 如果没有显示指定则直接通过调用当前ControllerBuilder的GetControllerFactory方法获取

  public class MvcRouteHandler : IRouteHandler

  

  private IControllerFactory _controllerFactory;

  public MvcRouteHandler() this(ControllerBuilder Current

   GetControllerFactory())

  

  public MvcRouteHandler(IControllerFactory controllerFactory)

  

  _controllerFactory = controllerFactory;

  

  IHttpHandler IRouteHandler GetHttpHandler(RequestContext requestContext)

  

  string controllerName = (string)requestContext RouteData

   GetRequiredString( controller )

  SessionStateBehavior sessionStateBehavior = _controllerFactory

   GetControllerSessionBehavior(requestContext controllerName)

  requestContext HttpContext SetSessionStateBehavior(sessionStateBehavior)

  return new MvcHandler(requestContext)

  

  

  在用于提供HttpHandler的GetHttpHandler方法中 除了返回一个实现了IHttpHandler接口的MvcHandler对象之外 还需要对当前HTTP上下文的会话状态行为模式进行设置 具体的实现是 先通过包含在RequestContext的RouteData对象得到Controller的名称 该名称连同RequestContext对象一起传入ControllerFactory的GetControllerSessionBehavior方法得到一个类型为SessionStateBehavior的枚举 最后通过RequestContext得到当前HTTP上下文(实际上是一个HttpContextWrapper对象) 并调用其SetSessionStateBehavior方法对会话状态行为进行设置

  通过第 章 URL路由 的介绍我们知道 RouteData中的RouteHandler属性最初来源于对应的路由对象 而当我们调用RouteCollection的扩展方法MapRoute方法时注册的Route对象对应的RouteHandler是一个MvcRouteHandler对象 由于在创建MvcRouteHandler对象时并没有显式指定ControllerFactory 所以通过当前ControllerBuilder的GetControllerFactory方法得到的ControllerFactory默认被使用

  通过当前ControllerBuilder的GetControllerFactory方法得到的ControllerFactory仅仅用于获取会话状态行为模式 而MvcHandler真正将它用于创建Controller 如下的代码片段基本上体现了MvcHandler的定义 它对请求处理的逻辑定义在BeginProcessRequest方法中

cha138/Article/program/net/201311/16088

相关参考

知识大全 ASP.NET MVC 4框架揭秘:总体设计

ASP.NETMVC4框架揭秘:总体设计  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  第章&n

知识大全 ASP.NET MVC 4框架揭秘:ControllerFactory[2]

ASP.NETMVC4框架揭秘:ControllerFactory[2]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们

知识大全 ASP.NET MVC 4框架揭秘:ControllerFactory[1]

ASP.NETMVC4框架揭秘:ControllerFactory[1]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们

知识大全 ASP.NET MVC 4框架揭秘:Controller(1)

ASP.NETMVC4框架揭秘:Controller(1)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一

知识大全 ASP.NET MVC 4框架揭秘:Controller(3)

ASP.NETMVC4框架揭秘:Controller(3)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一

知识大全 ASP.NET MVC 4框架揭秘:Controller(2)[2]

ASP.NETMVC4框架揭秘:Controller(2)[2]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起

知识大全 ASP.NET MVC 4框架揭秘:Controller(2)[1]

ASP.NETMVC4框架揭秘:Controller(2)[1]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起

知识大全 ASP.NET MVC 4框架揭秘:CBuilder(1)[1]

ASP.NETMVC4框架揭秘:CBuilder(1)[1]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看

知识大全 ASP.NET MVC 4框架揭秘:CBuilder(1)[2]

ASP.NETMVC4框架揭秘:CBuilder(1)[2]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看

知识大全 ASP.NET MVC 4框架揭秘:CBuilder(2)[2]

ASP.NETMVC4框架揭秘:CBuilder(2)[2]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看