文章引导

MVC路由解析---IgnoreRoute

MVC路由解析---MapRoute

MVC路由解析---UrlRoutingModule

Area的使用

引言:

此文全文内容90%转自

一.前言

在MVC中,一个请求对应一个Controller的Action,熟悉asp.net的人应该知道,asp.net请求实际交给了HttpHandler进行了处理,HttpHandler就是ASP.NET的处理器。MVC的Action,请求都会交给HttpHandler。具体是在管道事件中,会根据请求创建一个HttpHandler,执行HttpHandler的ProcessRequest方法。

二.UrlRoutingModule

MVC的路由机制是通过一个UrlRoutingModule完成的,它是一个实现了IHttpModule的类,HttpModule通过注册HttpApplication事件参与到管道处理请求中。具体是订阅HttpApplication某个阶段的事件。废话不多说,上源码

public class UrlRoutingModule:IHttpModule
{
public RouteCollection _routeCollection; protected virtual void Init(HttpApplication application)
{
application.PostResolveRequestCache+=OnApplicationPostResolveRequestCache;
} void OnApplicationPostResolveRequestCache(object sender,EventArgs e)
{
HttpApplication app=(HttpApplication)sender;
HttpContextBase context=new HttpContextWrapper(app.Context);
PostResolveRequestCache(context);
} public virtual void PostResolveRequestCache(HttpContextBase context)
{
RouteData routeData=RouteCollection.GetRouteData(context); IRouteHandler routeHandler=routeData.RouteHandler; RequestContext requestContext=new RequestContext(context,routeData);
context.Request.RequestContext=requestContext; IHttpHandler httpHandler=routeHandler.GetHttpHandler(requestContext);
context.RemapHandler(httpHandler);
}
}

我们看看UrlRoutingModule的路线图

Route.GetRouteData:

public override RouteData GetRouteData(HttpContextBase httpContext)
{
//AppRelativeCurrentExecutionFilePath:获取应用程序的虚拟路径,并通过对应用程序根使用波形符(~)表示法,(例:~/page.aspx)使该路径成为相对路径。
//HttpRequest.PathInfo:获取扩展名的附加信息,例:对于 URL Http://www.contoso.com/virdir/page.html/tail,PathInfo 值为 /tail。
string requestPath=httpContext.Request.AppRelativeCurrentExecutionFilePath.SubString()+httpContext.Request.PathInfo; RouteValueDictionary values=_parseRoute.Match(requestPath,Defaults); RouteData routeData=new RouteData(this,RouteHanlder); foreach(var item in values)
{
routeData.Values.Add(item.Key,value.Value);
} //DataTokens
}

GetRouteData通过HttpContext来获取路由信息,形成RouteData,将URL与Defaults的Key进行匹配,形成RouteValueDictionary ,我们看看RouteData内部信息

属性:Route--->RouteData有参构造函数的参数Route

RouteHandler--->RouteData有参构造函数的参数IRouteHandler

方法:GetRouteData---->return RouteData

GetRequiredString---->string

上述的RouteHandler由Route的构造函数参数传入,  这里的Route来自于

MVC路由解析---UrlRoutingModule的更多相关文章

  1. MVC路由解析---IgnoreRoute

    MVC路由解析---IgnoreRoute   文章引导 MVC路由解析---IgnoreRoute MVC路由解析---MapRoute MVC路由解析---UrlRoutingModule Are ...

  2. MVC路由解析---MapRoute

    文章引导 MVC路由解析---IgnoreRoute MVC路由解析---MapRoute MVC路由解析---UrlRoutingModule Area的使用 引言 前面我们讲了IgnoreRout ...

  3. AspNet Mvc 路由解析中添加.html 等后缀 出现404错误的解决办法

    使用Mvc 有时候我们希望,浏览地址以.html .htm 等后缀名进行结尾. 于是我们就在RouteConfig 中修改路由配置信息,修改后的代码如下 routes.IgnoreRoute(&quo ...

  4. ASP.NET MVC路由解析

    继续往下看<ASP.NET MVC5框架揭秘>. ASP.NET系统通过注册路由和现有的物理文件路径发生映射.而对于ASP.NET MVC来说,请求的是某个Controller中的具体的A ...

  5. ASP.NET 路由解析

    这段时间在读园子里Artech大神的<ASP.NET MVC5框架揭秘>,慢慢地从底层了解了MVC模式的设计思路.下面是一些阅读的总结. 传统的Web Forms应用,URL指向的是具体的 ...

  6. 在ASP.NET非MVC环境中(WebForm中)构造MVC的URL参数,以及如何根据URL解析出匹配到MVC路由的Controller和Action

    目前项目中有个需求,需要在WebForm中去构造MVC的URL信息,这里写了一个帮助类可以在ASP.NET非MVC环境中(WebForm中)构造MVC的URL信息,主要就是借助当前Http上下文去构造 ...

  7. 2016/5/6 thinkphp ①框架 ② 框架项目部署 ③MVC模式 ④控制器访问及路由解析 ⑤开发和生产模式 ⑥控制器和对应方法创建 ⑦视图模板文件创建 ⑧url地址大小写设置 ⑨空操作空控制器 ⑩项目分组

    真实项目开发步骤: 多人同时开发项目,协作开发项目.分工合理.效率有提高(代码风格不一样.分工不好) 测试阶段 上线运行 对项目进行维护.修改.升级(单个人维护项目,十分困难,代码风格不一样) 项目稳 ...

  8. MVC路由配置

    目录 URL Routing 的定义方式 示例准备 给片段变量定义默认值 定义静态片段 自定义片段变量 自定义片段变量的定义和取值 将自定义片段变量作为Action方法的参数 指定自定义片段变量为可选 ...

  9. MVC 路由

    1.ASP.NET MVC框架中提供的URL路由机制能够使URL不必映射到应用程序的特定物理文件. 2.当用户访问基于MVC模式创建的网站时,只需要在浏览器地址栏里输入类似于下面的URL: http: ...

随机推荐

  1. 公司-IT-Mercari:Mercari 百科

    ylbtech-公司-IT-Mercari:Mercari 百科 Mercari是一个日本C2C二手交易平台.拥有针对智能手机的C2C(个人与个人之间的电子商务)二手交易APP,此外还提供针对书籍与C ...

  2. std::sort的详细用法

    #include <algorithm> #include <functional> #include <array> #include <iostream& ...

  3. Python笔记(十一)_匿名函数与map()、filter()

    匿名函数 无需显式定义函数名,和函数过程,使代码更精简的lambda表达式 函数没有命名,不用担心函数名的冲突 冒号前面代表函数的参数,后面表示计算过程 >>>func=lambda ...

  4. 重读ORB_SLAM之Tracking线程难点

    1. 初始化 当获取第一帧图像与深度图后,首先设置第一帧位姿为4*4单位矩阵,然后为整个map添加关键帧与地图点.且更新地图点与关键帧的联系,例如地图点被哪个关键帧观测到,而此关键帧又包含哪些地图点. ...

  5. MariaDB学习笔记(二)

    七 索引索引:索引是创建在表上的,是对数据库表中的一列或多列的值进行排序的一种结构.索引可以提高查询的速度.索引有两种存储类型: B型树索引 哈希索引I nnoDB和MyISAM支持B型树索引,MEM ...

  6. lsyncd+rsync文件实时同步

    1.rsync两端都需要安装 yum -y install rsync 2.提供lsyncd的安装源 rpm -ivh http://dl.fedoraproject.org/pub/epel/6/x ...

  7. Codeforces 354B 博弈, DP,记忆化搜索

    题意:现在有一个字符矩阵,从左上角出发,每个人交替选择一个字符.如果最后字符a数目大于字符b,那么第一个人获胜,否则b获胜,否则平均.现在双方都不放水,问最后结果是什么? 思路:这题需要注意,选择的字 ...

  8. http请求访问响应慢问题解决的基本思路

    第一步,检查网络 ping命令检查网络域名解析是否正常,ping服务器的延迟是否过大,如果过大可以检查Ip是否冲突,或者交换机网线是否正常插好,通过nmon还可以查看网络流量,一般用的千兆交换机理论速 ...

  9. Java jvisualvm简要说明(转)

    转自:http://blog.csdn.net/a19881029/article/details/8432368 jvisualvm能干什么:监控内存泄露,跟踪垃圾回收,执行时内存.cpu分析,线程 ...

  10. 使用CSS3的@media来编写响应式的页面

    首先要知道,我们为什么要写自适应的页面(响应式页面) [直接看干货] 众所周知,电脑.平板.手机的屏幕是差距很大的,假如在电脑上写好了一个页面,在电脑上看起来不错,但是如果放到手机上的话,那可能就会乱 ...