• .NET MVC执行过程


    1、网址路由比对

    2、执行Controller与Action

    3、执行View并返回结果

    在使用MVC中是由IgnoreRoute()辅助方法对比成功的,会导致程序直接跳离MVC的执行生命周期,将程序继续执行的权利交回给IIS,由IIS决定接下来应该由哪个模块或哪个处理例程(Handler)来执行。

    阶段

    详细

    接收应用程序的第一次请求

    在Global.asax文件中, Route对象 被添加到RouteTable对象.

    执行路由选择

    UrlRoutingModule 模块使用第一个在RouteTable 集合中匹配的Route 对象来创建RouteData对象, 然后它将使用这个RouteData对象来创建RequestContext (IHttpContext)对象.

    创建MVC request handler

    MvcRouteHandler 创建MvcHandler类的一个实例,并且将它传递给RequestContext实例.

    创建controller

    MvcHandler对象使用RequestContext实例来确认IControllerFactory 对象(DefaultControllerFactory类的一个实例) ,以用来创建conteoller实例。

    执行controller

    MvcHandler 实例调用controller的执行method.

    调用action

    大部分controllers 继承自Controller基础类. 与controller相关联的ControllerActionInvoker 对象决定这个controller类的哪个方法将被调用 , 然后再调用那个方法.

    执行result

    大部分controllers 继承自Controller基础类. 与controller相关联的ControllerActionInvoker 对象决定这个controller类的哪个方法将被调用 , 然后再调用那个方法.

    Routing

    Routing表示网址路由,在MVC中的作用:

    1、 比对通过浏览器传来的HTTP;

    2、 将适当的网址返回浏览器;

    如果HttpHandler是由MVCHandler来处理的,那么就会进入MVC的执行声明周期,并会找到适当的Controller与Action来对其进行处理,并将信息反馈给客户端。

    换句话说,Routing模块的责任是将传入的浏览器请求映射为特有的MVC controller actions。

    Global.asax中定义网址路由

    C#代码  
    1. public class MvcApplication : System.Web.HttpApplication
    2. {
    3. public static void RegisterRoutes(RouteCollection routes)
    4. {
    5. routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
    6. routes.MapRoute(
    7. "Default", // 路由名称
    8. "{controller}/{action}/{id}", // 带有参数的URL
    9. new { controller = "Home", action = "Index", id = UrlParameter.Optional } // 参数默认值
    10. );
    11. }
    12. protected void Application_Start()
    13. {
    14. AreaRegistration.RegisterAllAreas();
    15. RegisterRoutes(RouteTable.Routes);
    16. }
    17. }

    a、所有的ASP.NET Web应用程序执行的入口是HttpApplication的Application_Start()方法,这个方法被调用时会反过来调用RegisterRoutes()方法。其中RouteTable.Routes是一个公开的静态对象,用于存储所有的Routing的规则集(RouteCollection类)

    b、IgnoreRoute辅助方法,用于定义不需要通过Routing处理的网址,设定*.axd等格式的网址路径不通过mvc执行。

    c、Default为Route的名称,这里需要注意的是网址不能已"/"开头。

    假如,你在网页浏览器的地址栏中键入下面的url:/Home/Index/3,这个默认的route会将这个url映射为下面的参数:

    controller = Home

    controller名称

    action = Index

    controller action

    id = 3

    id的参数

    当你请求/Home/Index/3这样的url,下面的代码将执行。HomeController.Index(3)。 这个默认的route包含3个默认的参数。如果你没有提供一个 controller,那么 controller默认为Home。同样,action默认为Index,id参数默认为空字符串。

    当然有的时候我们需要特定的routing需求,那样的话,我们就需要创建一个自定义的route。

    最后就是顺序很重要,越靠前的,越先调用。

  • 相关阅读:
    node中npm安装模块的网络问题
    微信开发
    7-49 打印学生选课清单 (25 分) 数据结构与算法题目集(中文)
    7-53 两个有序序列的中位数 (25 分) 数据结构与算法题目集(中文)
    练习4.2 平衡二叉树的根 (25 分) 浙大版《数据结构(第2版)》题目集
    习题4.3 是否二叉搜索树 (25 分) 浙大版《数据结构(第2版)》题目集
    实验3-1 求一元二次方程的根 (20 分) 《C语言程序设计实验与习题指导(第3版)》
    主元素问题
    未出现的最小正整数
    交换两个线性表位置(或循环移动数组元素)
  • 原文地址:https://www.cnblogs.com/sylone/p/6094652.html
Copyright © 2020-2023  润新知