MVC 路由模块分析(一)
概述
主要分为四个部分进行分析。
First ——Usage;
then ——Extension;
and then ——Design;
last ——Test。
1. Usage
1.1 Display RouteData的值
MVC针对每一个请求,都会将请求转化为一个RouteData对象,添加到全局路由表中。
RouteData是一个包装类,可以打印其Values和DataTokens。
Eg1:
<tr> <td>Values:</td> <td> <ul> <% foreach (var tmp in RouteData.Values) { %> <li> <%= tmp.Key %> = <%= tmp.Value %> </li> <% } %> </ul> </td> </tr> <tr> <td>DataTokens:</td> <td> <ul> <% foreach (var tmp in RouteData.DataTokens) { %> <li> <%= tmp.Key %> = <%= tmp.Value %> </li> <% } %> </ul> </td> </tr>
Eg2:
public ActionResult RouteDemo() { foreach (var route in RouteTable.Routes) { var data = route.GetRouteData(HttpContext); Console.WriteLine(route.GetType().FullName); } return View(); }
1.2路由到物理文件
使用MapPageRoute方法完成此项功能。
步骤:
l 定义URL模板; l 创建defaults字典; l 创建dataTokens字典; l 创建constraint字典; l 调用MapPageRoute方法 |
var defaults = new RouteValueDictionary(); defaults.Add("areacode", "010"); defaults.Add("days", "2"); var constraints = new RouteValueDictionary(); constraints.Add("areacode", @"0\d{2,3}"); constraints.Add("days", @"[1-3]{1}"); var dataTokens = new RouteValueDictionary(); dataTokens.Add("defaultCity", "深圳"); dataTokens.Add("defaultDays", "200000"); RouteTable.Routes.MapPageRoute("default", "{areacode}/{days}", "~/Views/Home/RouteDemo.aspx", false, defaults, constraints, dataTokens);
1.3路由忽略
调用Ignore方法
routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); routes.IgnoreRoute("{filename}.css/{*pathInfo}"); //忽略*.css文件的路由
1.4直接注册路由
MapRoute方法实质上就是将路由对象(RouteBase的子类,如Route)添加到路由表中,故而可以直接添加。
Route route2 = new Route("{areacode}/{days}", defaults, constraints, dataTokens, new PageRouteHandler("~/Views/Home/RouteDemo.aspx")); RouteTable.Routes.Add(route2);
1.5缺省URL参数
id = UrlParameter.Optional
表明最后一个参数是可选的。此处可以猜测,存在一个解析器来判断UrlParameter。
敬请期待~~
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 智能桌面机器人:用.NET IoT库控制舵机并多方法播放表情
· Linux glibc自带哈希表的用例及性能测试
· 深入理解 Mybatis 分库分表执行原理
· 如何打造一个高并发系统?
· .NET Core GC压缩(compact_phase)底层原理浅谈
· 手把手教你在本地部署DeepSeek R1,搭建web-ui ,建议收藏!
· 新年开篇:在本地部署DeepSeek大模型实现联网增强的AI应用
· Janus Pro:DeepSeek 开源革新,多模态 AI 的未来
· 互联网不景气了那就玩玩嵌入式吧,用纯.NET开发并制作一个智能桌面机器人(三):用.NET IoT库
· 【非技术】说说2024年我都干了些啥