c# - 对 MVC Controller 感到好奇吗?

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

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

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

最佳答案

ASP.NET 路由通过获取路由值并将“Controller”附加到末尾,从 URL 中提取 Controller 的名称。因此“/home/”返回“HomeController”。

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

然后它将 Route 操作与 Controller 的方法进行匹配。

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

关于c# - 对 MVC Controller 感到好奇吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11746098/

相关文章:

c# - MVC 5/.NET 4.5 - 长时间运行的进程

iphone - 讨论iPhone上的MVC实现

php - PHP 框架中的 Action 方法与公共(public)方法

Java: View (GUI)和 Controller 与 MVC 的交互?

c# - Selenium C# : Adding explicitwait function

asp.net-mvc - 使用 .net XCC 库将 Azure Webapp 连接到 VM 上的 azure Marklogic:使用了与请求的协议(protocol)不兼容的地址 [::ffff:10.10.1.4]:9501

c# - 当我在派生类中时,如何 "unbind"附加到基类中事件的事件处理程序?

javascript - 来自 JQuery 填充字段的值未绑定(bind)到 MVC 模型

c# - 奇怪的访问冲突异常

c# - Windows Phone - Web 客户端请求未执行