文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

ASP.NET中怎么利用Routing处理请求

2023-06-17 21:06

关注

ASP.NET中怎么利用Routing处理请求,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

ASP.NET Routing是一个通用的组件,它不涉及到任何具体的请求处理方式。如果您需要,也可以自己基于它进行开发——如FubuMvc项目就是这么做的。
首先,如果您需要在项目中使用在ASP.NET Routing的功能,则需要在web.config文件中配置一个HttpModule:

      public static void RegisterRoutes(RouteCollection routes)          {    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   );   }

线程安全的),只不过我们平时不太会去这么做而已。值得注意的是,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(" p {*pathInfo}?);< {resource}.axd name="UrlRoutingModule">

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,那么剩下的便是各自的模型的处理方式了。

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注编程网行业资讯频道,感谢您对编程网的支持。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯