ASP.NET ControllerBase
最后修改于 2025 年 4 月 3 日
在本文中,我们将探讨 ASP.NET 8 中的 ControllerBase 类。这个基类对于构建没有视图支持的 Web API 控制器至关重要。
ASP.NET 是一个跨平台、高性能的框架,用于构建现代 Web 应用程序。ControllerBase 提供了处理 HTTP 请求的核心功能。
基本定义
ControllerBase 是 ASP.NET Core 中一个抽象基类,用于创建没有视图支持的 MVC 控制器。它专门为 Web API 场景而设计。
与包含视图支持的 Controller 不同,ControllerBase 专注于 HTTP 请求处理。它提供了对 Request、Response 和其他 HTTP 上下文的访问。
ControllerBase 包含对 Ok、NotFound 和 BadRequest 等常见 HTTP 响应的辅助方法。这些方法简化了返回正确的 HTTP 状态码的过程。
该类属于 Microsoft.AspNetCore.Mvc 命名空间。它是 ASP.NET Core 应用程序中 API 控制器的推荐基类。
ASP.NET ControllerBase 示例
以下示例演示了一个使用 ControllerBase 的 Web API 控制器。
var builder = WebApplication.CreateBuilder(args); builder.Services.AddControllers(); var app = builder.Build(); app.MapControllers(); app.Run();
这设置了一个基本的 ASP.NET 应用程序,并支持控制器。MapControllers
方法为控制器启用属性路由。
using Microsoft.AspNetCore.Mvc; [ApiController] [Route("api/[controller]")] public class TasksController : ControllerBase { private static List<TaskItem> _tasks = new() { new TaskItem(1, "Complete project", false), new TaskItem(2, "Write documentation", true), new TaskItem(3, "Review code", false) }; [HttpGet] public ActionResult<IEnumerable<TaskItem>> GetAllTasks() { return Ok(_tasks); } [HttpGet("{id}")] public ActionResult<TaskItem> GetTaskById(int id) { var task = _tasks.FirstOrDefault(t => t.Id == id); if (task == null) return NotFound(); return Ok(task); } [HttpPost] public IActionResult AddTask([FromBody] TaskItem task) { task.Id = _tasks.Max(t => t.Id) + 1; _tasks.Add(task); return CreatedAtAction(nameof(GetTaskById), new { id = task.Id }, task); } [HttpPut("{id}")] public IActionResult UpdateTask(int id, [FromBody] TaskItem updatedTask) { var existingTask = _tasks.FirstOrDefault(t => t.Id == id); if (existingTask == null) return NotFound(); existingTask.Title = updatedTask.Title; existingTask.IsCompleted = updatedTask.IsCompleted; return NoContent(); } } public record TaskItem(int Id, string Title, bool IsCompleted);
此控制器使用 ControllerBase 演示了一个完整的 CRUD API。它处理 GET、POST 和 PUT 请求以管理任务项。
ActionResult<T>
返回类型提供了更好的 OpenAPI/Swagger 文档。它结合了强类型与 HTTP 语义的优点。
POST 处理程序中的 CreatedAtAction
方法返回 201 状态码和 Location 标头。这遵循 REST 关于资源创建的最佳实践。
ControllerBase 的辅助方法,如 Ok
、NotFound
和 NoContent
,简化了返回正确的 HTTP 响应。该示例展示了 Web API 开发的常见模式。
来源
在本文中,我们探讨了 ASP.NET 8 中的 ControllerBase 类。这个强大的基类通过其辅助方法简化了 Web API 的开发。