Orchard路由随记(一)

对于Orchard来说,个人以为要真正理解Orchard,必须理解其路由工作方式。

一、Orchard的自定义路由由三种类型组成

1、分发类:

HubRoute:其功能是按租户筛选出当前访问租户的路由

2、容器类:

shellRoute:其功能是按当前租户路由,如果此时没有其它路由,路由数据处理后,交由MVC的路由处理

3、插件类:

主要是: AliasRoute ,其主要功能是处理别名路由,当然其功能不仅如此。别名路由(如将:locahost/thisisolditem,变成locahost/i)通过保存在数据库中对照表AliasRecord来工作,此类由Orchard.Alias.Routes加入到路由描述中,在Orchard_Alias_AliasRecord表中查找是否有别名路由存在。

不论如何路由,最后都会交由标准的MVC路由管理

二、Orchard通过对IRouteProvider接口扫描,获取了一组关于RouteDescriptor的列表,并通过RoutePublisher类Publish方法将所有描述转换为租户路由

1、按 RouteDescriptor 的先级排列路由;

2、加入合理的域;

3、根据描述生成ShellRoute类型的路由;

4、第3步中,如果有插件路由,则ShellRoute类路由将其包装(图2);

5、将ShellRoute类路由包装在HubRoute类路由中,即除原如路由(MVC原生路由),其它路由均包装进了 HubRoute;

6、是后形成的可能是(插件类不一定启用)如下:

HubRoute(shellRoute(AliasRoute(MvcRouteHandler)));

三、由第二条及多租户运行时不难理解,Orchard访问情形

1、用户访问;

2、创建Host如果还没有的话;

3、形成租户设置列表;

4、通过URL来判断应该使用哪一个租户设置;

5、根据当前租户,使用HubRoute路由,筛选出当前租户路由,进行匹配;

6、找到合适的控制器执行操作;

四、以下是运行期,真实的数据截图

  1、路由集合(可见所有路由均被HubRoute包裹)

2、shellRoute

时间: 2024-07-31 05:02:43

Orchard路由随记(一)的相关文章

Orchard学习 02、orchard 路由

Orchard对mvc路由重新做了包装,重写了asp.net的路由模块 一.路由模块类图 1.路由 Descriptor RouteDescriptor是对常规mvc路由的包装类,它的Route属性就是在mvc注册路由中使用的RouteBase类型.在Orchard中注册路由,应该用这种方式 newRouteDescriptor{ Route=newRoute( "Admin/Blogs/Create", newRouteValueDictionary{ {"area&quo

微信分享—ios和安卓机制居然不一样!

实际项目中,在做微信分享追踪的时候,遇到了一个百思不得其解的问题. 在加入了用户分享追踪功能之后,页面已经加载完成的情况下,安卓分享功能没有任何问题,ios却总是分享失败. 关于ios和安卓设备的差别 项目需求是,我们需要对用户的分享行为做追踪,对用户从哪个人分享的链接进来的做记录.所以每个用户有一个唯一的分享码. 用户A分享出去,链接上带有他自己的分享码.用户B点进链接的一瞬间,把当前url上的分享码传给后端做记录,同时替换上自己的分享码. 我使用替换参数的方式是直接修改router的quer

Orchard源码分析(7.1):Routing(路由)相关

概述 关于ASP.NET MVC中路由有两个基本核心作用,一是通过Http请求中的Url参数等信息获取路由数据(RouteData),路由数据包含了area.controller.action的名称等信息.只有获取了匹配的路由数据,才有可能转入ASP.NET MVC管道:二是根据由规则生成Url,比如要根据某些数据生成View上显示的链接. Orchard对路由进行扩展主要基于如下原因: (1).路由定义在各个模块中.在Orchard应用程序初始化时将分散在各个模块的路由定义收集起来统一注册.

记一次AngularJs 路由 $stateChangeStart不起作用(细节决定成败)

var app= angular .module('app', [ 'ngAnimate', 'ngCookies', 'ngResource', 'ngSanitize', 'ngTouch', 'ui.router', 'ui.bootstrap', 'datatablesDirectives', 'ngTable', 'ncy-angular-breadcrumb', 'ngFileUpload', 'MessageCenterModule', 'angular-loading-bar',

RabbitMQ学习第四记:路由模式(direct)

1.什么是路由模式(direct) 路由模式是在使用交换机的同时,生产者指定路由发送数据,消费者绑定路由接受数据.与发布/订阅模式不同的是,发布/订阅模式只要是绑定了交换机的队列都会收到生产者向交换机推送过来的数据.而路由模式下加了一个路由设置,生产者向交换机发送数据时,会声明发送给交换机下的那个路由,并且只有当消费者的队列绑定了交换机并且声明了路由,才会收到数据.下图取自于官方网站(RabbitMQ)的路由模式的图例 P:消息的生产者 X:交换机 红色:队列 C1,C2:消息消费者 error

Orchard Core 文档翻译 (五)自动路由 Autoroute (OrchardCore.Autoroute)

Autoroute (OrchardCore.Autoroute) 此模块允许您为内容项指定自定义URL(永久链接 permalink). Autoroute Part 将此部分附加到内容类型以指定内容项的自定义URL. 然后,转到内容类型的定义并编辑 Autoroute Part: 使用Liquid表达式输入Pattern,该表达式将表示生成的slug. 具有TitlePart的内容的示例将使用它来生成slug: {{ ContentItem | display_text | slugify

CCNP路由实验之十六 策略路由(PBR)

?? 策略路由(PBR)是一种比基于目标网络进行路由更加灵活的数据包路由转发机制.路由器将通过路由图决定如何对需要路由的数据包进行处理,路由图决定了一个数据包的下一跳转发路由器.在路由器转发一个数据报文时,首先根据配置的规则对报文进行过滤,匹配成功则按照一定的转发策略进行报文转发.这种规则可以是基于标准和扩展访问控制列表,也可以基于报文的长度:而转发策略则是控制报文按照指定的策略路由表进行转发,也可以修改报文的IP优先字段,策略路由也可以在一定程度上实现流量工程,使不同服务质量的流或者不同性质的

优酷路由宝L1刷Breed和Padavan固件方法

你的优酷路由宝想刷第三方固件吗?跟我来.....警告:刷机有风险,由此产生的一切后果请自行承担! 大家都知道,刷了breed以后,基本上就可以随便刷任何适合使用的固件了.所以,刷breed就是关键[事先准备]1.下载breed:http://pan.baidu.com/s/1hssIYxA,拷入U盘根目录,插到路由宝U口上.2.下载开了telnet的刷机包:http://pan.baidu.com/s/1dF7cqWh[步骤]1.路由宝手动升级,上传前面已经下载好了的YKL1_2.1.0613.

记一次企业高级组网中不正确配置PBR引发的环路排错

嗨,各位.好久没了,最近忙的一塌糊涂,作为一个勤奋好学的网工,我要把实战中遇到的问题记录下来,同时分享给各位.此次的文档分享,是上个月的一次项目实战中记录下来的PBR-策略路由排错.具体的配置不会一一记录,但是会写个大概配置. 毕竟都是有几年的网工经验了,基础的不会就别看了,我都嫌弃!!! 不多说,我们先上一张图,图的背景就不多介绍了,反正可以给大家保证的是全部均为实实在在的真机. PS:图进行了和谐,还有很多设备均进行了删减,做网工永远要记住一件事情,信息安全!!!! 图中设备清单如下:(仅列