ASP.NET Core Controller
Controller(控制器)就是 Web API 的“接待员”:接收 HTTP 请求,调用业务逻辑,然后返回 HTTP 响应。
1. Controller 在哪里工作
一次典型请求:
GET /api/products/1
↓
ASP.NET Core 路由匹配
↓
ProductsController.GetById(1)
↓
查询数据或调用 Service
↓
返回 200 + JSON
Controller 通常负责:
- 接收 URL、查询参数和 JSON 请求体
- 判断应该执行哪个 Action 方法
- 调用 Service 或数据库操作
- 返回状态码和 JSON 数据
ASP.NET Core 同时支持 Minimal API 和 Controller API。Controller 更适合接口较多、业务较复杂、需要清晰分层的项目。参考 微软 Controller Web API 教程。
2. 最简单的 Controller
using Microsoft.AspNetCore.Mvc;
namespace MyApi.Controllers;
[ApiController]
[Route("api/[controller]")]
public class ProductsController : ControllerBase
{
[HttpGet]
public IActionResult GetAll()
{
var products = new[]
{
new { Id = 1, Name = "键盘", Price = 299 },
new { Id = 2, Name = "鼠标", Price = 99 }
};
return Ok(products);
}
}
请求:
GET /api/products
返回:
[
{
"id": 1,
"name": "键盘",
"price": 299
},
{
"id": 2,
"name": "鼠标",
"price": 99
}
]
3. 逐行理解
[ApiController]
[ApiController]
告诉 ASP.NET Core:这是一个 Web API 控制器。
它还会提供一些自动行为,例如:
- 自动推断参数来自 URL 还是请求体
- 模型验证失败时自动返回
400 Bad Request - 使用更标准的 API 错误响应格式
[Route("api/[controller]")]
[Route("api/[controller]")]
定义 Controller 的基础地址。[controller] 会去掉类名的 Controller 后缀:
ProductsController → products
所以基础地址是:
/api/products
ControllerBase
public class ProductsController : ControllerBase
Web API Controller 通常继承 ControllerBase。它提供了很多返回 HTTP 响应的方法:
Ok(data); // 200
Created(...); // 201
BadRequest(...); // 400
Unauthorized(); // 401
NotFound(); // 404
NoContent(); // 204
Controller 则额外包含 MVC View 页面功能。只做 Web API 时,通常使用 ControllerBase。
[HttpGet]
[HttpGet]
表示这个方法处理 HTTP GET 请求。这个方法也叫做 Action:
public IActionResult GetAll()
因此 GET /api/products 会调用 GetAll()。