TOC

This article is currently in the process of being translated into Chinese (~84% done).

Getting Started:

Creating a Controller

在上一篇文章中,我们创建了自己的第一个 Asp.NET MVC 项目。它内置了一个方法来向这个世界显示一条消息(问候语)。但是很显然我们想做的不止于此!我们做的第一件与之有关的事情就是向你的项目添加一个控制器。

我们在早些时候简单地讨论过,控制器 扮演了中间人的角色——它将把你的模型视图 绑定在一起,然后将结果呈现给终端用户。然而,对于控制器来说,它可以自行完成一些基本的操作,而无需视图和模型的参与。例如,传递一段简单的文本消息或将用户的浏览器重定向到别的位置。

然而,在我们将一个新的控制器添加到我们的项目之前,我们需要先做一些其它的事情。

向 Web 项目中添加 MVC 支持

在上一篇文章中,我们使用空模板创建了一个新的Web项目。这个模板只给我们提供了一个非常非常基础的Web应用程序,因此我们需要为其添加MVC支持,以便 .NET Framework 和 Web 服务器知道如何处理接收到的请求等等。还记得我们在上一篇文章中修改过的 Startup.cs 文件吗?我们现在要在Visual Studio中再次把它打开,然后看看其中的ConfigureServices方法。该方法体现在是空的,让我们向其中添加下面这行代码:

services.AddMvc();

该方法体现在看起来应该和下面是一样的:

public void ConfigureServices(IServiceCollection services)
{
    services.AddMvc();
}

我们也需要修改 Configure() 方法——之前,它包含了一些代码来输出我们的"Hello, MVC world!" 问候语(消息),但我们想在未来让新的控制器来处理这个任务。你的 Web 应用程序需要知道如何将接收到的请求映射到你的控制器上——为了达成这一目标,它使用到了路由的概念。我们将在后续内容中讨论路由,因为那是一个非常复杂的东西。我们暂时先使用几行代码为现在的 Web 应用程序添加默认路由,这些代码位于下面例子的底部。那么,像下面这样,修改 Startup.cs 文件中的 Configure() 方法中的代码:

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    if(env.IsDevelopment())
    {
app.UseDeveloperExceptionPage();
    }

    app.UseRouting();
    app.UseEndpoints(endpoints =>
    {
endpoints.MapDefaultControllerRoute();
    });
}

现在,我们终于可以添加第一个控制器了!

添加一个控制器

MVC 应用程序的项目结构取决于你——如果你想的话,你可以将所有的控制器、模型、视图和其它的文件都放在项目的根目录中。然而,将各种文件分别放在与之有关的文件夹中是个不错的选择。例如,"Controllers"文件夹里只放控制器文件,"Views"文件夹中只放视图文件,以此类推。一旦你习惯了使用这种项目结构,无论是一个一般的项目还是完全由你自己开发的项目,你都会发现——定位项目中的文件是非常容易的。

那么,让我们向你的项目中添加一个名称为"Controllers"的文件夹吧!在解决方案管理器中,使用鼠标右键点击你的项目然后选择添加 -> 新文件夹,看起来像这样:

一个对话框将会弹出,需要你填写新文件夹的名称——只需要填入 "Controllers" 即可。填好之后,我们最终就可以向本项目中添加第一个控制器了。只需要使用鼠标右键点击刚刚新建的文件夹,然后选择 添加 -> 新项目...,像这样:

Visual Studio会提示你将脚手架应用于你新建的控制器,这通常意味着该控制器可以被自动创建一系列方法,然后就能做许多事情。然而,本教程要做的是从头教你学习MVC,因此你应该选择这个叫做"MVC 控制器 - 空" 的选项然后点击添加按钮。

一个对话框将会弹出,需要你填写新控制器的名称。我们想要叫它 “HomeController”,因此在对话框中输入这个名称然后点击确定按钮,一个新的控制器就生成了,如下所示:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;

namespace HelloMVCWorld.Controllers
{
    public class HomeController : Controller
    {
public IActionResult Index()
{
    return View();
}
    }
}

如你所见,新建的这个类看起来就像一个常规的C#类,并且继承了Controller类。一旦继承了Controller类,.Net框架就会将继承Controller类的那个类视为一个MVC控制器。新建的这个类中有一个名为Index()的方法,它将通过调用View() 方法来尝试返回默认的视图。如果要返回的视图就存储在.NET framework能够自动扫描得到的,用于存放视图的目录中,那么它就会被找到。然而,我们还没学到视图那部分知识,因此让我们修改此方法,来返回现在很流行的"Hello, MVC world!"这条消息。将方法体中唯一的一行代码修改后,看起来是这样的:

public IActionResult Index()
{
    return Content("Hello, MVC world!");
}

有了这段代码就够了——我们现在获得了一个带有Index()方法的控制器,这个方法将在你项目运行的时候被调用,这要归功于我们之前应用的默认路由。按下键盘上的F5 按键来运行你的项目,由你亲眼来看看——当默认浏览器启动之后,你应该会看到我们向这个世界展示的问候语。

总结

我们现在已经创建了MVC项目的第一个部分:控制器。。真实的项目中将会包含很多控制器,但现在我们先将就用这一个控制器,继续学习接下来几篇文章中的内容。在接下来的文章中,我们先是介绍了视图,然后介绍了模型。等我们学到那块的时候,MVC项目的结构看起来就相当复杂了。不过,一旦你了解了基本原理,一切就变得有意义了。

另外,你大可放心,有关控制器的知识远比本文中提到的多得多。本文仅仅是向你介绍一下控制器的概念,然后让你的第一个MVC项目运行起来。在本系列教程的后续部分,我们会深入探讨控制器的!


This article has been fully translated into the following languages: Is your preferred language not on the list? Click here to help us translate this article into your language!