欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

ASP.NET MVC 请求周期(Routing)

程序员文章站 2022-03-06 08:09:32
...

1. UrlRoutingModule

当最终用户发送请求时,会通过UrlRoutingModule 对象传递,UrlRoutingModule 是HTTP 模块。

2. Routing

UrlRoutingModule 会从route table集合中获取首次匹配的Route 对象,为了能够匹配成功,请求URL会与route中定义的URL pattern 匹配。

当匹配的时候必须考虑以下规则:

数字参数的匹配(请求URL和URL pattern中的数字)
ASP.NET MVC 请求周期(Routing)

URL pattern中的可选参数:
ASP.NET MVC 请求周期(Routing)

参数中定义的静态参数
ASP.NET MVC 请求周期(Routing)

3. 创建MVC Route Handler

一旦Route 对象被选中,UrlRoutingModule会获得 Route对象的 MvcRouteHandler对象。
4. 创建 RouteData 和 RequestContext

UrlRoutingModule使用Route对象创建RouteData,可用于创建RequestContext。RouteData封装了路径的信息如Controller名称,action名称以及route参数值。

Controller 名称

为了从URL 中获取Controller名称,需要按规则执行如在URL pattern中{Controller}是标识Controller名称的关键字。

Action Method 名称

为了获取action 方法名称,{action}是标识action 方法的关键字。

Route 参数

URL pattern能够获得以下值:

1.{controller}
2.{action}
3. 字符串,如 “MyCompany/{controller}/{action}”,“MyCompany”是字符串。
4. 其他,如“{controller}/{action}/{id}”,”id“是路径的参数。

例如:

Route pattern - > “{controller}/{action}/{id}”

请求 URL ->http://localhost:8870/BulkUpload/Upload/5

测试1

     public class BulkUploadController : Controller
     {
        public ActionResult Upload (string id)
         {
            //value of id will be 5 -> string 5
            ...
         }
     }

测试2

    public class BulkUploadController : Controller
    {
        public ActionResult Upload (int id)
        {
           //value of id will be 5 -> int 5
           ...
        }
   }

测试3

   public class BulkUploadController : Controller
     {
         public ActionResult Upload (string MyId)
         {
            //value of MyId will be null
           ...
         }
     }

5. 创建MVC Handler

MvcRouteHandler 会创建 MVCHandler的实例传递 RequestContext对象

6. 创建Controller实例

MVCHandler会根据 ControllerFactory的帮助创建Controller实例

7. 执行方法

MVCHandler调用Controller的执行方法,执行方法是由Controller的基类定义的。

8. 调用Action 方法

每个控制器都有与之关联的 ControllerActionInvoker对象。在执行方法中ControllerActionInvoker对象调用正确的action 方法。

9. 运行结果

Action方法会接收到用户输入,并准备好响应数据,然后通过返回语句返回执行结果,返回类型可能是ViewResult或其他。

=======================================
http://www.cnblogs.com/powertoolsteam/p/MVC_Six.html

相关标签: MVC