ASP.NET MVC 请求周期(Routing)

1. UrlRoutingModule

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

2. Routing

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

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

数字参数的匹配(请求URL和URL pattern中的数字)
这里写图片描述

URL pattern中的可选参数:
这里写图片描述

参数中定义的静态参数
这里写图片描述

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值