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
推荐阅读
-
解读ASP.NET 5 & MVC6系列教程(11):Routing路由
-
详解ASP.NET Core MVC 源码学习:Routing 路由
-
ASP.NET MVC3 SEO优化:利用Routing特性提高站点权重
-
ASP.NET MVC Routing、Areas、URLs
-
详解ASP.NET Core MVC 源码学习:Routing 路由
-
ASP.NET/MVC/Core的HTTP请求流程
-
基于asp.net MVC 应用程序的生命周期(详解)
-
ASP.NET MVC 请求流程
-
ASP.NET Core MVC学习教程之路由(Routing)
-
ASP.NET Core MVC解决控制器同名Action请求不明确的问题