对于一个ASP.NET MVC应用来说,针对HTTP请求的处理实现在目标 Controller 类型的某个Action方法中,每个HTTP请求不再像ASP.NET Web Forms 应用一样是针对一个物理文件,而是针对某个Controller的某个Action方法。目标 Controller 和Action 的名称由 HTTP请求的URL来决定,当ASP.NETMVC接收到抵达的请求后,其首要任务就是通过当前HTTP请求的解析得到目标 Controller和Action 的名称,这个过程是通过ASP.NET MVC的路由系统来实现的。我们通过如下几个对象构建了一个简易的路由系统。
- RouteData
ASP.NET 定义了一个全局的路由表,路由表中的每个 Route 对象包含一个路由模板。目标Controller 和Action的名称可以通过路由变量以占位符(比如“(controller)”和“[action”)的形式定义在模板中,也可以作为路由对象的默认值(无须出现在路由模板中)。对于每一个抵达的HTTP请求,路由系统会遍历路由表并找到一个具有与当前请求URL 模式相匹配的 Route对象,然后利用它解析出以 Controller 和 Action名称为核心的路由数据。在我们自建的 ASP.NETMVC框架中,通过路由解析得到的路由数据通过具有如下定义的 RouteData类型表示。
public class RouteData
{
public IDictionary<string, object> Values {
get; private set; )
public IDictionary<string, object > DataTokens