知识大全 ASP.NET Routing对请求的处理方法
Posted 知
篇首语:勿以恶小而为之,勿以善小而不为。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 ASP.NET Routing对请求的处理方法相关的知识,希望对你有一定的参考价值。
ASP.NET Routing对请求的处理方法 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
首先 如果您需要在项目中使用在ASP NET Routing的功能 则需要在web config文件中配置一个HttpModule
<add name= UrlRoutingModule type= System Web Routing UrlRoutingModule System Web Routing />
其次 您应该在Application_Start中向RouteCollection类型的RouteTable Routes集合中添加一系列RouteBase对象 并为每个RouteBase对象指定一个独立的名称(大小写无关) 当然 您也可以在运行时动态添加或删除内容(RouteCollection对象是线程安全的) 只不过我们平时不太会去这么做而已 值得注意的是 RouteCollections里的 RouteBase对象 它们的顺序是非常重要的
UrlRouteModule会监听ASP NET Request Pipelines的PostResolveRequestCache事件 在这个事件中UrlRouteModule会将当前的HttpContext 作为参数调用RouteTable Routes集合的GetRouteData方法 在RouteCollection的GetRouteData方法中 又会依次将HttpContext传入每一个RouteBase对象的GetRouteData方法 如果中途某个RouteBase对象返回了一个非null的结果 则这个结果便会直接返回给UrlRouteModule
如果UrlRouteModule调用RouteTable Routes GetRouteData方法得到了null 则 一切都像没有发生过 如果GetRouteData方法得到了结果——一个RouteData对象 此时RouteData Values便会包含请求中捕获到的数据 RouteData中另一个重要的成员便是RouteData RouteHandler属性 它返回一个IRouteHandler对象 IRouteHandler接口中只有一个方法GetHttpHandler 它接受RequestContext作为参数 并返回一个 IHttpHandler对象 如ASP NET MVC框架在利用ASP NET Routing时 便会使用MvcRouteHandler来返回一个MvcHandler对象 不过 UrlRouteModule在得到了 IRouteHandler对象之后 并不会直接调用其GetHttpHandler方法 而是判断它是不是ASP NET Routing自带的StopRoutingHandler类型 StopRoutingHandler是个特殊的IRouteHandler对象 它的作用只是告诉UrlRouteModule 虽然某个规则匹配成功了 但是——也还是当什么都没发生过吧 因此 如果我们想要 跳过 一些形式的请求 往往则需要将 忽略 功能放在其他所有规则之前 如
public static void RegisterRoutes(RouteCollection routes) routes IgnoreRoute( resource axd/*pathInfo ); routes IgnoreRoute( scripts/*pathInfo ); routes IgnoreRoute( images/*pathInfo ); routes MapRoute( Default // Route name controller/action/id // URL with parameters new controller = Home action = Index id = // Parameter defaults );
IgnoreRoute是定义在ASP NET MVC中 基于RouteCollection类型的扩展方法 它会向RouteCollection中添加一个Route对象 而这个Route对象在匹配成功时返回的RouteData对象 其RouteHandler属性便为一个StopRoutingHandler 于是余下的Routing规则也不会继续匹配了——这一点和RouteBase对象返回null不同 因为如果返回null 则余下的规则还会依次匹配 如果返回了一个包含 StopRoutingHander的RouteData 则剩下的Routing规则全部跳过
如果UrlRouteModule得到的IRouteHandler对象不是StopRoutingHandler 则便会通过其 GetHttpHandler方法获得那个IHttpHandler对象 这个IHttpHandler对象会被放入HttpContext的Items 集合中 至此 Request Pipeline的PostResolveRequestCache事件便结束了
UrlRouteModule还会监听PostMapRequest事件 此时Module便会查找HttpContext Items集合的特定位置中是否包含一个IHttpHandler对象 如果存在 则会将这个对象设为当前HttpContext对象的Handler属性的值 于是当 ASP NET继续执行下去时 便会调用这个Handler的ProcessRequest方法来处理请求了
如果这个IHttpHandler对象是MvcHttpHandler 那么它便会从RouteData中获取一些数据 构造 Controller对象 执行Action等等 如果它是一个DynamicDataHandler 或是WebForm的HttpHandler 那么剩下的便是各自的模型的处理方式了 ( lian )
cha138/Article/program/net/201311/14063相关参考
知识大全 ASP.NET4实用方法Url Routing的使用
ASP.NET4实用方法UrlRouting的使用 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!l
知识大全 IIS处理Asp.net请求和 Asp.net页面生命周期
IIS处理Asp.net请求和Asp.net页面生命周期 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下
知识大全 比较IIS5、IIS6、IIS7的ASP.net请求处理过程
比较IIS5、IIS6、IIS7的ASP.net请求处理过程 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看
Asp.net自动返回上次请求页面 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! &nb
详解ASP.NETMVC的请求生命周期 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 本文的目的
ASP.NET站点构建之减少不必要的请求 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 前言本篇
优化HTTP前端请求构建高性能ASP.NET站点 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
构建高性能ASP.NET站点之优化HTTP请求 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!HTT
详解ASP.NETMVC应用程序请求生命周期 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 当一
ASP.NET内部原理 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 在以前的ASP时候当请求一