ZetCode

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 控制器。

Program.cs
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddControllers();

var app = builder.Build();

app.MapControllers();
app.Run();

这设置了一个基本的 ASP.NET 应用程序,并支持控制器。MapControllers 方法为控制器启用属性路由。

Controllers/TasksController.cs
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 的辅助方法,如 OkNotFoundNoContent,简化了返回正确的 HTTP 响应。该示例展示了 Web API 开发的常见模式。

来源

Microsoft ASP.NET Web API 文档

在本文中,我们探讨了 ASP.NET 8 中的 ControllerBase 类。这个强大的基类通过其辅助方法简化了 Web API 的开发。

作者

我叫 Jan Bodnar,我是一名充满激情的程序员,拥有丰富的编程经验。我从 2007 年开始撰写编程文章。迄今为止,我已撰写了 1,400 多篇文章和 8 本电子书。我在教学编程方面拥有超过十年的经验。

列出所有 ASP.NET 教程