Asp.net Mvc 请求是如何到达 MvcHandler的——UrlRoutingModule、MvcRouteHandler分析,并造个轮子
2012-08-11 22:51
741 查看
前言
本文假定读者对 HttpModule 、HttpHandler和IIS的处理流程有一定的了解,如果为了解可以参考以下链接。文中大部分代码通过Reflector反编译 System.Web.dll 得到,.net 版本为4.0IIS 5.0 和 6.0 的 ASP.NET 应用程序生命周期概述
IIS 7.0 的 ASP.NET 应用程序生命周期概述
HTTP 处理程序和 HTTP 模块概述
Asp.net MVC 程序虽然开发的模式不同,但是其本质上还是 Asp.net。其利用了HttpModule 和 HttpHandler 做了扩展,可以参考博客园里的大牛——Artech 相关系列文章。
本文主要关注UrlRoutingModule 、MvcRouteHandler 两个类的源代码,进而分析客户的请求是如何到达MvcHandler 的。
Asp.net MVc 程序启动流程 需要关注的行为
1、Application启动时先通过RouteTable把URL映射到Handler2、通过UrlRouting Module 这个HttpModule 拦截用户请求。
我们知道,HttpModule 是注册在 Web.config 中的,可是当你打开Asp.net MVc 程序的Web .Config 时 却没有发现该配置节,原因是:"它已经默认的写在全局的中"。应此 你可以在 “$\Windows\Microsoft.NET\Framework\版本号\Config\Web.config“ 中找到 " <add name="UrlRoutingModule-4.0" type="System.Web.Routing.UrlRoutingModule" />”
UrlRoutingModule 源码
UrlRoutingModule 位于 System.web.dll 文件中,利用Reflector 可以查看到其源码:路由注册
void Application_Start(object sender, EventArgs e) { RegRoutes(RouteTable.Routes); } private void RegRoutes(RouteCollection routeCollection) { routeCollection.MapWheelRoute(null, "{controller}/{action}/{*id}", new { controller = "Home", action = "index", id = 1 }); }
完成最后我们还需要组成自定义的HttpModule
在Web.Config 中添加如下配置:
<system.webServer> <modules runAllManagedModulesForAllRequests="true"> <add name="WheelRouting" type="WheelRouting.WheelRoutingModule,WheelRouting"/> </modules> </system.webServer>
关于 HttpModule的介绍 可以参考:演练:创建和注册自定义 HTTP 模块
下面是运行结果:
Controller默认值为 Home Action 默认值为 index
源码:点击下载
相关文章推荐
- Asp.net Mvc 请求是如何到达 MvcHandler的——UrlRoutingModule、MvcRouteHandler分析,并造个轮子
- Asp.net MVC源码分析--UrlRoutingModule与Service location的亲密接触
- 004. Asp.Net Routing与MVC 之二: 请求如何激活Controller和Action
- ASP.NET MVC 中如何用自定义 Handler 来处理来自 AJAX 请求的 HttpRequestValidationException 错误
- Asp.Net构架(Http请求处理流程)、(Http Handler 介绍)、(HttpModule 介绍)
- ASP.NET MVC:自定义 Route 生成小写 Url(转)
- [杂] ASP.NET MVC 之 Route To MvcHandler
- ASP.NET MVC是如何运行的[2]: URL路由
- ASP.NET MVC 3.0(三): 初识MVC的Url映射潜规则Routing
- 如何在ASP.NET MVC 中获取当前URL、controller、action
- Asp.net Mvc-Url和Route介绍之一
- asp.net mvc源码分析 - 路由(Routing)
- Asp.net Mvc 重点教程一周年版 第二回 UrlRouting
- Asp.Net Mvc 应用程序如何应对不同的URL地址?????,问题解决了
- 理解ASP.NET MVC系列之二:URL Routing机制:RouteTable
- asp.net mvc源码分析-Route的GetRouteData
- ASP.NET MVC 中如何处理 ASP.NET WebForm 或其他历史遗留的 URL
- ASP.NET MVC 中 RouteHandler 的扩展
- ASP.NET MVC的运行机制--url的全局分析
- [ASP.NET MVC 专题] 如何为Route构造相关的自定义Configuration