服務器在接收請求后,會解析url,從中找到請求的類的名字,並在類名后加上Controller作為真實的類名
當瀏覽器發送localhost:xxx/Home/Index請求時,服務器創建HomeController對象並調用Index方法,Index方法返回內容發給瀏覽器
url請求直接來到Controller中(Controller控制器)--->Controller從Model中取數據(Model模型)--->Model可能會去訪問數據庫--->Controller根據業務邏輯,選擇合適的View呈現給客戶端(View視圖)--->View返回給客戶端
IIs→AspNetRuntime→Controller→View→Response
所有的ASP.NET Web應用程序執行的入口是HttpApplication的Application_Start()方法,這個方法被調用時會反過來調用RegisterRoutes()方法。其中RouteTable.Routes是一個公開的靜態對象,用於存儲所有的Routing的規則集(RouteCollection類)
Global.asax文件中RegisterRoutes方法
所謂的路由是URL到控制器類(Controller)的某個方法(Action)的映射,ActionResult方法必須是Public
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
其含義是:
1.MapRoute的第一個參數的意思是定義一條默認的路由規則,當然可以定義很多規則。其名字為“Default”
2.第二個參數就定義了什么樣的URL格式才能被解析,其格式為http://www.websitename.com/控制器的類名/方法名/可選的參數 ,注意其命名規則,一般控制器的名字為HomeController,那么訪問的時候控制器名為Home而不是完整的HomeController,如:http://localhost:45269/Home/Index
3.第3個參數定義的是一個默認的值,也就是輸入http://www.websitename.com的時候默認會訪問哪個控制器以及Action方法。采用的是.net 3.5的匿名類語法。注意這個默認的控制器與Action並不是一起控制的,比如定義的默認控制器為Home,那么訪問http://www.websitename.com就會訪問Home控制器的index方法,定義的默認控制器為index,那么你訪問bbb控制器的時候如http://www.websitename.com/bbb就會訪問bbb控制器的index。