从一个针对ASP.NET MVC框架的Controller.Action的请求处理顺序来说整个请求过程。

下面引用的所有代码都源自ASP.NET MVC的源码,但是只选取其中的一部分。

System.Web.Routing.UrlRoutingModule在管道事件中注册PostResolveRequestCache事件。

protected virtual void Init(HttpApplication application) {
    application.PostResolveRequestCache += OnApplicationPostResolveRequestCache;
}

  在这个事件中会调用RouteCollection.GetRouteData方法去获取RoteData,而RouteCollection.GetRouteData方法会按照注册的顺序先后调用在web应用程序中注册的所有Route对象的GetRouteData方法,在调用过程中如果发现有一个匹配的,那么后续的Route对象的GetRouteData方法不会再执行(所以最特殊的Route需要最先注册)。

public RouteData GetRouteData(HttpContextBase httpContext) {
	// Go through all the configured routes and find the first one that returns a match
	using (GetReadLock()) {
		foreach (RouteBase route in this) {
			RouteData routeData = route.GetRouteData(httpContext);
			if (routeData != null) {
				// If we‘re not routing existing files on this route and the file exists, we also stop processing routes
				if (!route.RouteExistingFiles) {
					if (!doneRouteCheck) {
						isRouteToExistingFile = IsRouteToExistingFile(httpContext);
						doneRouteCheck = true;
					}
					if (isRouteToExistingFile) {
						return null;
					}
				}
				return routeData;
			}
		}
	}
	return null;
}

  在管道事件PostResolveRequestCache中获取到RouteData对象之后,会通过该对象的RouteHandler属性去获取一个

时间: 2024-10-07 05:59:33

从一个针对ASP.NET MVC框架的Controller.Action的请求处理顺序来说整个请求过程。的相关文章

重建程序员能力(3)-asp.net MVC框架增加Controller

    MVC在微软中提供的框架目前只是发现是asp.net用.另 8年前,我做了个MVC的Windows APP框架如果有兴趣我日后会介绍给大家,欢迎大家关注.MVC的概念网站上有很多,大家去查阅一定能看到,这里不重复讲述了.这里只是介绍怎么加. 1. 找到asp.net项目,然后好到Controller文件夹,右键展开菜单 [添加] 展开下一层菜单,然后选择[控制器]. 2.在对话框中有3个选项,这次为表述方便先用空的MVC5控制器 3.填写一下控制器的名称按添加即可. 需要注意的是Cont

白话ASP.NET MVC之三:Controller是如何解析出来的

我们在上一篇文章中介绍Controller激活系统中所涉及到的一些类型,比如有关Controller类型的相关定义类型就包括了IController类型,IAsyncController类型,ControllerBase抽象类型和我们最终要使用的抽象类型Controller,这是ASP.NET MVC 框架中和Controller本身定义相关的类型.其他辅助类型,包括管理Controller的类型ControllerFactory,这个工厂负责Controller的生产和销毁.我们还涉及到另一个

BrnShop开源网上商城第二讲:ASP.NET MVC框架

在团队设计BrnShop的web项目之初,我们碰到了两个问题,第一个是数据的复用和传递,第二个是大mvc框架和小mvc框架的选择.下面我依次来说明下. 首先是数据的复用和传递:对于BrnShop的每一次请求,程序都要分成好几个阶段执行,例如验证,执行动作方法等等,在各个阶段我们可能需要重复使用同一信息,而我们的愿景就是希望此信息只需获取一次,然后沿着流程管道一直流动,这样在后面的阶段中就可以直接使用,不用再重新获取了,提高程序的性能.举例来说:在授权验证阶段,我们为对用户进行验证,从而获取了用户

【工作笔记二】ASP.NET MVC框架下使用MVVM模式

ASP.NET MVC框架下使用MVVM模式 原文:http://www.cnblogs.com/n-pei/archive/2011/07/21/2113022.html 对于asp.net mvc开发人员或爱好者来说,MVVM模式可能你不是很了解.本来这个模式就是针对WPF和Silverlight开发提出的开发模式. 大概一年前,我当时迷恋Silverlight时,学习了MVVM一段时间,没想到现在可以在MVC用到. 我看了下之前有两篇文章介绍MVVM的.希望可以对MVVM不了解的人有点帮助

ASP.NET MVC框架下添加菜单栏及分页项目

原创声明:本文为作者原创,转载请注明出处:http://www.cnblogs.com/DrizzleWorm/p/7274866.html ,谢谢! 我是做前端开发的,之前用C#的三层架构(UI.BLL.DAL)做过一个网站,这是我第一次接触ASP.NET MVC框架,首先给大家分享别人整理的ASP.NET MVC框架的一组教程:http://www.cnblogs.com/powertoolsteam/archive/2015/08/13/4667892.html内容很齐全,我是在先看了其他

写自己的ASP.NET MVC框架(下)

上篇博客[写自己的ASP.NET MVC框架(上)] 我给大家介绍我的MVC框架对于Ajax的支持与实现原理.今天的博客将介绍我的MVC框架对UI部分的支持. 注意:由于这篇博客是基于前篇博客的,因此有些已说过的内容将会直接跳过,也不会给出提示.所以,如果要想理解这篇博客,那么阅读上篇博客[写自己的ASP.NET MVC框架(上)]则是必要的. 回到顶部 MyMVC的特点 在开发MyMVC的过程中,我吸取了一些ASP.NET WebForm的使用经验,也参考了ASP.NET MVC,也接受了Ma

【转】ASP.NET MVC框架下使用MVVM模式-KnockOutJS+JQ模板例子

KnockOutJS学习系列----(一) 好几个月没去写博客了,最近也是因为项目紧张,不过这个不是借口,J. 很多时候可能是因为事情一多,然后没法静下来心来去写点东西,学点东西. 也很抱歉,突然看到好多的短消息,真不知道该如何给大家回复... 最近试着晚上抽时间写一些knockoutjs和mvc的文章.这里先写一点knockoutjs的东西. 关于knockoutjs到底是什么,如果你不知道,可以看看几个月前我写的一篇文章介绍它. ASP.NET MVC框架下使用MVVM模式 我也是之前安装了

asp.net MVC 框架中控制器里使用Newtonsoft.Json对前端传过来的字符串进行解析

下面我用一个实例来和大家分享一下我的经验,asp.net MVC 框架中控制器里使用Newtonsoft.Json对前端传过来的字符串进行解析. using Newtonsoft.Json; using System; using System.Collections.Generic; using System.Web.Mvc; namespace MyWebApp.Controllers { public class TestController : Controller { public A

学习ASP.NET MVC框架揭秘笔记目录

学习ASP.NET MVC框架揭秘笔记目录 第一章     ASP.NET+MVC 1.1传统的MVC模式 持续更新中,,,,