ASP.NET Core Web API 控制器
在上一个练习中,你创建了一个 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
类了。