知识大全 ASP.NET Routing对请求的处理方式

Posted

篇首语:人总要找点事情做,让自己忙起来,忙起来才知道生活不易,才明白平时的忧伤都是矫情。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 ASP.NET Routing对请求的处理方式相关的知识,希望对你有一定的参考价值。

ASP.NET Routing对请求的处理方式  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  首先 如果您需要在项目中使用在ASP NET Routing的功能 则需要在nfig文件中配置一个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 那么剩下的便是各自的模型的处理方式了

cha138/Article/program/net/201311/12848

相关参考

知识大全 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自动返回上次请求页面

Asp.net自动返回上次请求页面  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! &nb

知识大全 详解ASP.NET MVC的请求生命周期

详解ASP.NETMVC的请求生命周期  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  本文的目的

知识大全 ASP.NET站点构建之减少不必要的请求

ASP.NET站点构建之减少不必要的请求  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  前言本篇

知识大全 优化HTTP前端请求构建高性能ASP.NET站点

优化HTTP前端请求构建高性能ASP.NET站点  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  

知识大全 构建高性能ASP.NET站点之优化HTTP请求

构建高性能ASP.NET站点之优化HTTP请求  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!HTT

知识大全 详解ASP.NET MVC应用程序请求生命周期

详解ASP.NETMVC应用程序请求生命周期  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  当一

知识大全 ASP.NET中处理异常的几种方式

ASP.NET中处理异常的几种方式  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  程序中使用tr