对MVC控制器感到好奇吗?

时间:2012-07-31 17:51:19

标签: c# asp.net-mvc model-view-controller

一个简单的问题,当您为新的MVC ASP.Net应用程序创建新控制器时,它如何知道要使用哪个控制器。更具体地说,假设您创建了一个新的控制器,并将其称为SockController以便使用所述控制器,我将导航到http://mywebapp/sock。 Web应用程序是如何知道/ Sock /链接到SockController的?某处有映射吗?或者如果不是,当你在创建它时从名称中调用omit controller时会发生什么,即称之为SockCont。

注意:我不是一个好奇的Web Dev,所以请不要发布带有大量文本的链接,我正在寻找简短的答案。

1 个答案:

答案 0 :(得分:2)

ASP.NET Routing通过获取Route Value然后将“Controller”附加到末尾,从URL中提取控制器的名称。所以“/ home /”返回“HomeController”。

然后,ASP.NET使用反射遍历项目程序集(或引用的程序集)中的每个类,以查找从System.Web.Mvc.Controller继承的类,并称为“HomeController”。然后它使用默认的无参数构造函数来创建它的实例。

然后将Route操作与控制器的方法匹配。

此过程称为“Dispatch”,在PHP,Ruby-on-Rails等中可以看到类似的模式,除了那些动态语言有不同的方法将类名解析为实际对象(CakePHP使用类自动加载绑定)例如,找到类定义。