代码
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:7247/WeatherForecast 的请求。
备注:
路由可能包含静态字符串,如 api/[controller] 中所示。 在此示例中,此控制器将处理对 https://localhost:7247/WeatherForecast 的请求。
使用 Get() 方法提供天气预报结果
WeatherForecastController 包括由 [HttpGet(Name = “GetWeatherForecast”)] 属性指定的单个控制器操作。 此属性将 HTTP GET 请求路由到 public IEnumerable Get() 方法。 因此,在上一个练习中,你看到了向 https://localhost:7247/WeatherForecast 发出请求会导致返回天气预报结果。
你将在本模块的稍后部分了解到,其他常见操作与执行 CRUD 操作(GET、PUT、POST、DELETE)的 Web API 相关联。 但 API 控制器只需要实现一个控制器操作。
在本例中,你将获取返回的 WeatherForecast 的完整列表。 GET 操作还允许通过传递标识符来检索单个项。 在 ASP.NET 中,可以通过使用 [HttpGet(“{id}”)] 属性来实现此目的。