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
Orchard路由随记(一)的更多相关文章
- Orchard学习 02、orchard 路由
Orchard对mvc路由重新做了包装,重写了asp.net的路由模块 一.路由模块类图 1.路由 Descriptor RouteDescriptor是对常规mvc路由的包装类,它的Route属性就 ...
- 微信分享—ios和安卓机制居然不一样!
实际项目中,在做微信分享追踪的时候,遇到了一个百思不得其解的问题. 在加入了用户分享追踪功能之后,页面已经加载完成的情况下,安卓分享功能没有任何问题,ios却总是分享失败. 关于ios和安卓设备的差 ...
- Orchard源码分析(7.1):Routing(路由)相关
概述 关于ASP.NET MVC中路由有两个基本核心作用,一是通过Http请求中的Url参数等信息获取路由数据(RouteData),路由数据包含了area.controller.action的名称等 ...
- 记一次服务器路由跟踪 (2019-01-23 TODO)
记一次服务器路由跟踪 有用户反馈网站 无法访问. 现象如下: ping 没有反馈,确认了可以 ping 通其它的网站. tracert 跟踪到服务器商的内部就没的反应了. 同样一家的服务器商,另外一台 ...
- 真千兆路由的极限之OPENWRT MAKE, 某品牌白菜价QCA9558/QCA9880/QCA8337N纯种组合OS搭建时记
自从上次仙人梦里放了一张无字天书,解惑了WPR003N的秘诀后,渐渐的,就忘了这件这事情,连想好的评测都拖延了好多月了,毕竟路由是拿来用的,不是用来写什么陈词滥调的评测的,无意间,热爱白菜的我发现了一 ...
- 全世界仅有的唯一最高LINUX版本的白菜路由,支持NAND记
在上上篇 真千兆路由的极限之OPENWRT MAKE, 某品牌白菜价QCA9558/QCA9880/QCA8337N纯种组合OS搭建时记 里,有没有还记否之模式退一步,海阔天空 回到了远古时代的ar7 ...
- react中的路由配置踩坑记
react 路由配置中,如果根路由(/)匹配一个组件,另一个路由(/list)在进行匹配的时候也会匹配到根路由(/),即在 /list 页面展示的时候 / 页面总是展示在上方. 此时如果想进行严格匹配 ...
- 记一次AngularJs 路由 $stateChangeStart不起作用(细节决定成败)
var app= angular .module('app', [ 'ngAnimate', 'ngCookies', 'ngResource', 'ngSanitize', 'ngTouch', ' ...
- 【React踩坑记二】react项目实现JS路由跳转
这里使用的是4.31版本的react-router-dom "react-router-dom": "^4.3.1", 直接使用以下代码即可实现路由跳转 thi ...
随机推荐
- [BZOJ 3995] [SDOI2015] 道路修建 【线段树维护连通性】
题目链接:BZOJ - 3995 题目分析 这道题..是我悲伤的回忆.. 线段树维护连通性,与 BZOJ-1018 类似,然而我省选之前并没有做过 1018,即使它在 ProblemSet 的第一页 ...
- bootcamp
为了鄙社自主研发的html5studio和mist,我给Air划了32G装windows囧 第一要注意的是,必须使用bootcamp划分将要安装windows的分区,不要在windows安装过程中删除 ...
- 8.WCF简化的 AJAX(*)
开发步骤: 添加一个Web项目,在Web项目中新建“新建项”->"Web"->"启用了AJAX的WCF服务" 页面上拖放ScriptManager控 ...
- Nginx windows下搭建过程
内容列表: 简要介绍 下载安装 配置测试 一.简要介绍 Nginx ("engine x") 是一个高性能的 HTTP 和 反向代理 服务器,也是一个 IMAP/POP3/SMTP ...
- decodeURIComponent
var s = '%%' try { s = decodeURIComponent(s) } catch(e) { console.log(e) } console.log(s)
- 【VirtualDOM】
前沿技术解密——VirtualDOM miniflycn/qvd Matt-Esch/virtual-dom Facebook React 和 Web Components(Polymer)对比优势和 ...
- 【转】Xcode7真机调试iOS应用程序
原文网址:http://i.cnblogs.com/EditPosts.aspx?opt=1 近日苹果发布的新的Xcode7带来了许多特性,比如:swift语言比以前运行更快.功能更强.代码具有更高的 ...
- apple ID的重要性
当手机丢失时,您可以将对应的产品码提供给运营商,提高找回丢失手机的可能性. 2.去App store下载“查找我的iPhone(Find My iPhone)”,立刻安上,用你的app ...
- C# 客服端上传文件与服务器器端接收 (简单代码)
简单代码: /*服务器端接收写入 可以实现断点续传*/ public string ConnectUpload(string newfilename,string filepath,byte[] fi ...
- LoadRunner的场景设置
loadrunner场景设置的方法: 1.逐步增加用户数,分多次去运行场景.比如:第一次运行50并发,第二次运行100并发…… 2.针对同一个脚本设置多个组,使用组策略(点击Edit Schedule ...