ASP.NET MapControllers
最后修改于 2025 年 4 月 3 日
在本文中,我们将探讨 ASP.NET 8 中的 MapControllers 方法。此方法对于在 ASP.NET Core 应用程序中启用特性路由至关重要。
ASP.NET Core 是一个跨平台框架,用于构建现代 Web 应用程序。MapControllers 使用特性简化了路由配置。
基本定义
MapControllers 是 ASP.NET Core 中的一个扩展方法,它将控制器操作的终结点添加到应用程序的请求管道。它为控制器启用了特性路由。
在应用程序配置中调用 MapControllers 时,它会扫描所有已注册的控制器以查找路由特性,如 [Route]、[HttpGet] 和 [HttpPost]。然后,它将这些特性映射到终结点路由。
MapControllers 通常用于最小 API 应用程序,或者当您只想使用特性路由时。它同时支持 MVC 和 Web API 控制器。
ASP.NET MapControllers 示例
以下示例演示了使用 MapControllers 的基本 Web API 设置。
var builder = WebApplication.CreateBuilder(args); // Add services to the container. builder.Services.AddControllers(); var app = builder.Build(); // Configure the HTTP request pipeline. app.UseHttpsRedirection(); app.UseAuthorization(); // Map controller routes app.MapControllers(); app.Run();
此代码设置了一个基本的 ASP.NET Core Web API 应用程序。关键一行是 app.MapControllers()
,它为应用程序中的所有控制器启用了特性路由。
using Microsoft.AspNetCore.Mvc; [ApiController] [Route("api/[controller]")] public class WeatherForecastController : ControllerBase { private static readonly string[] Summaries = new[] { "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching" }; [HttpGet(Name = "GetWeatherForecast")] public IEnumerable<WeatherForecast> Get() { return Enumerable.Range(1, 5).Select(index => new WeatherForecast { Date = DateOnly.FromDateTime(DateTime.Now.AddDays(index)), TemperatureC = Random.Shared.Next(-20, 55), Summary = Summaries[Random.Shared.Next(Summaries.Length)] }) .ToArray(); } [HttpGet("{days}")] public IEnumerable<WeatherForecast> GetByDays(int days) { return Enumerable.Range(1, days).Select(index => new WeatherForecast { Date = DateOnly.FromDateTime(DateTime.Now.AddDays(index)), TemperatureC = Random.Shared.Next(-20, 55), Summary = Summaries[Random.Shared.Next(Summaries.Length)] }) .ToArray(); } } public record WeatherForecast(DateOnly Date, int TemperatureC, string? Summary) { public int TemperatureF => 32 + (int)(TemperatureC / 0.5556); }
此控制器演示了两个不同的 HttpGet 终结点。第一个方法响应 GET /api/weatherforecast
并返回 5 天的天气预报。
第二个方法使用路由参数 {days}
来返回特定天数的预报。它响应诸如 GET /api/weatherforecast/7
这样的请求。
[ApiController]
特性启用了多个 Web API 约定,例如自动模型验证和错误响应的“Problem Details”。[Route]
特性设置了此控制器中所有操作的基本路径。
此示例演示了 MapControllers 如何根据其路由特性自动发现和映射这些终结点。在 Program.cs 中无需额外的路由配置。
来源
在本文中,我们探讨了 ASP.NET 8 中的 MapControllers 方法。此强大功能简化了使用特性路由时的终结点配置。