在上一个练习中,你创建了一个 Web 应用程序,用于提供示例天气预报数据,然后,你使用了 HTTP REPL 与该应用程序交互。
在深入探讨如何编写自己的 PizzaController
类之前,让我们先看一下 WeatherController
示例中的代码,了解它的工作原理。 在本单元中,你将了解 WeatherController
如何在几十行代码中使用 ControllerBase
基类和几个 .NET 属性来生成正常工作的 Web API。 了解这些概念后,便可以编写自己 PizzaController
的类了。
以下是整个 WeatherController
类的代码。 如果你还不明白,请不要担心。 我们将逐步完成这一过程。
using Microsoft.AspNetCore.Mvc;
namespace ContosoPizza.Controllers;
[ApiController]
[Route("[controller]")]
public class WeatherForecastController : ControllerBase
{
private static readonly string[] Summaries = new[]
{
"Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"
};
private readonly ILogger<WeatherForecastController> _logger;
public WeatherForecastController(ILogger<WeatherForecastController> logger)
{
_logger = logger;
}
[HttpGet(Name = "GetWeatherForecast")]
public IEnumerable<WeatherForecast> Get()
{
return Enumerable.Range(1, 5).Select(index => new WeatherForecast
{
Date = DateTime.Now.AddDays(index),
TemperatureC = Random.Shared.Next(-20, 55),
Summary = Summaries[Random.Shared.Next(Summaries.Length)]
})
.ToArray();
}
}
基类:ControllerBase
控制器是一个公共类,具有一个或多个称为“操作”的公共方法。 按照惯例,控制器放在项目根目录的 Controllers 目录中。 操作通过路由被公开为 HTTP 终结点。 因此,对 https://localhost:{PORT}/weatherforecast
的 HTTP GET
请求将执行 WeatherForecastController
类的 Get()
方法。
首先要注意的是,此类继承自 ControllerBase
基类。 这个基类提供了许多用于处理 HTTP 请求的标准功能,让你可以专注于应用程序的特定业务逻辑。
备注
如果你在 ASP.NET Core 中开发过 Razor Pages 或模型-视图-控制器 (MVC) 体系结构,那么你已使用过
Controller
类。 不要通过从Controller
类派生来创建 Web API 控制器。Controller
派生自ControllerBase
,并添加了对视图的支持,因此它用于处理网页,而不是 Web API 请求。
API 控制器类属性
有两个重要属性应用到了 WeatherForecastController
,如以下代码所示:
[ApiController]
[Route("[controller]")]
public class WeatherForecastController : ControllerBase
[ApiController]
启用固定行为,使生成 Web API 更加容易。 一些行为包括参数源推理、将属性路由作为一项要求以及模型验证错误处理增强功能。
[Route]
定义路由模式 [controller]
。 [controller]
令牌将替换为控制器的名称(不区分大小写,无 Controller 后缀)。 此控制器处理对 https://localhost:{PORT}/weatherforecast
的请求。
备注
路由可能包含静态字符串,如
api/[controller]
中所示。 在此示例中,此控制器将处理对https://localhost:{PORT}/api/weatherforecast
的请求。
使用 Get()
方法提供天气预报结果
WeatherForecastController
包括由 [HttpGet(Name = "GetWeatherForecast")]
属性指定的单个控制器操作。 此属性将 HTTP GET
请求路由到 public IEnumerable<WeatherForecast> Get()
方法。 因此,在上一个练习中,你看到了向 https://localhost:{PORT}/weatherforecast
发出请求会导致返回天气预报结果。
你将在本模块的稍后部分了解到,其他常见操作与执行 CRUD 操作(GET
、PUT
、POST
、DELETE
)的 Web API 相关联。 但 API 控制器只需要实现一个控制器操作。
在本例中,你将获取返回的 WeatherForecast
的完整列表。 GET
操作还允许通过传递标识符来检索单个项。 在 ASP.NET 中,可以通过使用 [HttpGet("{id}")]
属性来实现此目的。 在下一练习中将实现该属性。
现在,你已了解了 Web API 控制器的基本组件,现在可以创建自己的 PizzaController
类了。