文档
C# ASP.NET Core — Controller RESTful API
目标
使用 Controller 模式构建完整的用户管理 RESTful API,模拟数据库 CRUD 操作。
完整代码
// Models/User.cs
public record User(int Id, string Name, string Email);
// Models/CreateUserRequest.cs
public record CreateUserRequest(string Name, string Email);
// Models/UpdateUserRequest.cs
public record UpdateUserRequest(string? Name, string? Email);
// Controllers/UsersController.cs
using Microsoft.AspNetCore.Mvc;
[ApiController]
[Route("api/[controller]")]
public class UsersController : ControllerBase
{
private static readonly List<User> _users = new()
{
new(1, "Alice", "alice@example.com"),
new(2, "Bob", "bob@example.com"),
};
private static int _nextId = 3;
// GET /api/users
[HttpGet]
public IActionResult GetAll() =>
Ok(new { total = _users.Count, data = _users });
// GET /api/users/{id}
[HttpGet("{id:int}")]
public IActionResult GetById(int id)
{
var user = _users.FirstOrDefault(u => u.Id == id);
return user is null ? NotFound(new { error = "User not found" }) : Ok(user);
}
// POST /api/users
[HttpPost]
public IActionResult Create([FromBody] CreateUserRequest request)
{
if (string.IsNullOrWhiteSpace(request.Name) ||
string.IsNullOrWhiteSpace(request.Email))
return BadRequest(new { error = "name and email are required" });
var user = new User(_nextId++, request.Name, request.Email);
_users.Add(user);
return CreatedAtAction(nameof(GetById), new { id = user.Id }, user);
}
// PUT /api/users/{id}
[HttpPut("{id:int}")]
public IActionResult Update(int id, [FromBody] UpdateUserRequest request)
{
var user = _users.FirstOrDefault(u => u.Id == id);
if (user is null) return NotFound(new { error = "User not found" });
var updated = user with
{
Name = request.Name ?? user.Name,
Email = request.Email ?? user.Email
};
_users[_users.IndexOf(user)] = updated;
return Ok(updated);
}
// DELETE /api/users/{id}
[HttpDelete("{id:int}")]
public IActionResult Delete(int id)
{
var user = _users.FirstOrDefault(u => u.Id == id);
if (user is null) return NotFound(new { error = "User not found" });
_users.Remove(user);
return NoContent();
}
}
Program.cs(注册控制器)
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddControllers(); // 注册控制器
var app = builder.Build();
app.MapControllers(); // 映射控制器路由
app.Run();
测试
curl http://localhost:5000/api/users
curl -X POST http://localhost:5000/api/users \
-H "Content-Type: application/json" \
-d '{"name":"Charlie","email":"charlie@example.com"}'
curl -X PUT http://localhost:5000/api/users/1 \
-H "Content-Type: application/json" \
-d '{"name":"Alice Updated"}'
curl -X DELETE http://localhost:5000/api/users/3
要点说明
[ApiController]自动模型验证、400 响应、路由推断record类型提供值相等、with表达式、不可变性[FromBody]从 JSON 请求体绑定参数CreatedAtAction返回 201 + Location 头NoContent()返回 204(删除成功标准)