2

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

注意:我不是网络开发人员,我只是好奇,所以请不要发布包含大量文本的页面链接,我正在寻找一个简短的简单答案。

4

1 回答 1

2

ASP.NET 路由通过获取路由值然后在末尾附加“控制器”来从 URL 中提取控制器的名称。所以“/home/”返回“HomeController”。

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

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

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

于 2012-07-31T17:54:19.150 回答