知识大全 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.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)小编为大家搜集整理后发布的内容,让我们赶快一起来看