zoukankan      html  css  js  c++  java
  • 深入理解ASP.NET MVC(1)

    系列目录

    ASP.NET MVC请求的服务过程

    下图是书中的截图,表述了一次通常的ASP.NET MVC请求的服务过程:

    image

    从图中可以初步看出一个HttpRequest是如何被ASP.NET和ASP.NET MVC框架执行的:经过IIS和ASP.NET处理后,Core Routing会首先根据URL匹配物理路径上的文件,如果不能匹配则由核心路由模块执行路由,路由被匹配后,MvcRouteHandler会将这个请求“带入”MVC框架,执行Controller和Action,Action可以直接注入response,或者更平常的是返回一个ActionResultActionResultExecutedResult方法将被调用,如果是个ViewResult(继承自ActionResult),则会使用WebFormViewEngine转化一个Html,并注入到response。

    在以后的系列中,将会对以上过程进行详细分析理解。

      

    URL机制包括什么

    URL映射不是MVC的机制,但是MVC充分依赖它,并发挥了它的优势。它位于MVC框架前端,是MVC主框架 的入口。传统的URL往往对应了服务器磁盘物理路径的文件,而MVC的URL机制打破了这种束缚,使得服务器的文件组织可以不再暴露于众,而是映射到 controller和action上。URL机制包括两个主要的工作:

    1.URL正向映射(inbound)到Controller和Action

    2.Controller和Action反向映射(outbound)并构造URL

    设置路由

    先来回顾一下基本的内容。应用程序初次启动时需要像下面这样注册一个URL:

    1
    2
    3
    routes.MapRoute(null,
        "{controller}/{action}",
        new { controller = "CarView", action = "Index" } );

    上面代码的MapRoute其实是RouteCollection的一个扩展方法,它有多个重载,先来看看MapRoute最复杂的一个重载版本的源码:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    public static Route MapRoute(this RouteCollection routes, string name, string url, object defaults, object constraints, string[] namespaces) {
        if (routes == null) {
            throw new ArgumentNullException("routes");
        }
        if (url == null) {
            throw new ArgumentNullException("url");
        }
     
        Route route = new Route(url, new MvcRouteHandler()) {
            Defaults = new RouteValueDictionary(defaults),
            Constraints = new RouteValueDictionary(constraints)
        };
     
        if ((namespaces != null) && (namespaces.Length > 0)) {
            route.DataTokens = new RouteValueDictionary();
            route.DataTokens["Namespaces"] = namespaces;
        }
     
        routes.Add(name, route);
     
        return route;
    }

    从源码可以看出,MapRoute做的事情就是构造一个Route对象,将它加到全局的RouteCollection:RouteTable.Routes中。RouteCollection是RouteBase的集合,Route对象继承自RouteBase。先简单看看Route对象的一些属性:

    属性名 描述
    Url(string) 将要被匹配的URL模型,其中用{}定义参数名
    RouteHandler(IRouteHandler) 当Route匹配的时候,IRouteHandler应当处理request
    Defaults(RouteValueDictionary) 为参数提供一个默认值表
    Constraints(RouteValueDictionary) 为参数提供匹配规则表
    DataTokens(RouteValueDictionary) 为route handler提供一个选择controller的依据,主要用于Areas机制

    这些属性将在下面的内容中深入讨论。

    劳动果实,转载请声明出处:http://www.cnblogs.com/P_Chou/archive/2010/11/01/details-asp-net-mvc-01.html

  • 相关阅读:
    初始线程(相关理论)
    python并发编程之多进程2-(数据共享及进程池和回调函数)
    python并发编程之多进程1--(互斥锁与进程间的通信)
    Cpython支持的进程与线程
    网络编程之进程理论简介
    python之网络socket编程
    Gray码 (格雷码) 【二进制】
    [BZOJ 2350] [Poi2011] Party 【Special】
    [BZOJ 1033] [ZJOI2008] 杀蚂蚁antbuster 【模拟!】
    [BZOJ 3209] 花神的数论题 【数位统计】
  • 原文地址:https://www.cnblogs.com/feng-NET/p/4665284.html
Copyright © 2011-2022 走看看