This article is currently in the process of being translated into Chinese (~95% done).
Introduction
教程的开始部分,我们简单讨论了MVC模式中的控制器,也添加了一个控制器到我们的项目中,从而使我们了解它是什么以及怎么用,并且让你快速的启动和运行程序。本章,我们将进一步讨论控制器,在文章的开始,我们先来回顾一下控制器的核心概念。
什么是控制器?
在本系列教程的开头,我们提到,控制器扮演了中间人的角色——它会将你的 模型 与 一个 视图 绑定在一起,然后将结果呈现给终端用户。然而,控制器自己就可以完成一些基本的操作,而无需模型和视图的参与。例如:简单输出一则文本消息,或是重定向用户浏览器到其它的位置。我们将在后续的文章中讨论 Action Results。
在 ASP.NET MVC 中,一个控制器就像其它的类,因此它的文件拓展名也是 .cs(如果你用的是 Visual Basic 编程语言,那么它的文件拓展名就是 .vb),并且看起来也像其它的 .NET 类。然而,控制器文件里面有些东西会让你(和 .NET framework)将其识别识别为一个 MVC 控制器。
- 控制器类通常会放在项目根目录中的一个名为"Controllers"的文件夹中
- 控制器类继承了 Microsoft.AspNetCore.Mvc.Controller 类(或者继承了其它你自定义的、同时也继承了Microsoft.AspNetCore.Mvc.Controller的类)
- 控制器类的名称经常以 Controller 这个单词结尾,例如 "HomeController" 或是 "ProductsController"
如果你不遵守这些约定,那么 .NET framework 就不能把你的类识别成一个控制器,因此有理由来遵守这些约定。然而,如果你坚持将你的控制器类以不同的方式命名,你可以使用 [Controller] 特性来对其进行修饰,将其放在声明类语句的上方。
通过继承 Microsoft.AspNetCore.Mvc.Controller 类,你就可以获得一些用于 MVC 操作的功能。例如,将视图/部分视图 作为返回结果的能力。它也能使你的控制器获得访问 HTTP 相关信息的能力,例如,得益于 Controller 类中的 HttpContext 属性,你就能够访问 query string。
控制器放在哪?
正如我上面提到的那样,控制器通常放在你 MVC 项目的根目录中的一个名为 "Controllers" 的文件夹。它们的命名通常是基于它们的目的,以"Controller"一次作为结尾。在解决方案浏览器中,文件夹结构看起来像这样:
总结
希望你现在更好地理解了 控制器 是什么以及控制器是如何被定义的。在本章节接下来的文章中,我们将深究更多与控制器相关的东西,以便你能够了解在 MVC 中可以使用控制器来做的一切事情。