简介:用 C# 快速轻松构建 REST API
现代 Web 应用和移动服务的开发离不开 REST API。如果您想快速为项目搭建后端,C# 搭配 ASP.NET Core 框架是理想选择。凭借内置工具、极简配置和出色性能,您可以在短短 30 分钟内编写出一个功能完整的 REST API。
本文将逐步讲解如何创建一个用于管理任务列表 (Todo List) 的简单 API。您将学习如何配置项目、创建数据模型、实现包含 CRUD 操作的控制器,以及使用 Swagger 测试 API。所有代码示例均使用 C# (.NET 8) 编写。
即使您是 C# 新手,按照本文指导操作,也能在文章末尾获得一个可运行的 API。
1. 创建项目并配置环境
首先,请确保您已安装 .NET SDK(版本 8 或更高)。您可以从 官方网站 下载。安装完成后,打开终端或命令行。
使用以下命令创建一个新的 ASP.NET Core Web API 项目:
dotnet new webapi -n TodoApicd TodoApi此命令将创建一个名为 TodoApi 的文件夹,其中包含基本的项目结构。里面已有文件 Program.cs(入口点)和用于存放未来控制器的 Controllers 文件夹。
在 Visual Studio、Visual Studio Code 或 Rider 中打开该项目。为简单起见,您也可以使用任何文本编辑器。
请确保 Program.cs 文件中包含 AddSwaggerGen() 和 UseSwagger() 的调用。Swagger 默认包含在模板中——这将简化测试。如果没有,请添加:
builder.Services.AddEndpointsApiExplorer();builder.Services.AddSwaggerGen();// ...app.UseSwagger();app.UseSwaggerUI();2. 创建数据模型和临时存储
对于我们的 API,我们将任务存储在内存中 (in-memory)。在实际项目中,您会连接数据库,但对于演示 30 分钟解决方案来说,这已经足够了。
创建一个 Models 文件夹,并在其中创建文件 TodoItem.cs:
public class TodoItem{ public int Id { get; set; } public string Title { get; set; } = string.Empty; public bool IsCompleted { get; set; }}现在,创建一个简单的服务仓库。在 Services 文件夹中,创建接口 ITodoService.cs 及其实现 TodoService.cs。这将便于将来切换到真实的数据库。
ITodoService.cs:
public interface ITodoService{ List<TodoItem> GetAll(); TodoItem? GetById(int id); TodoItem Create(TodoItem item); TodoItem? Update(int id, TodoItem item); bool Delete(int id);}TodoService.cs:
public class TodoService : ITodoService{ private readonly List<TodoItem> _items = new(); private int _nextId = 1;
public List<TodoItem> GetAll() => _items;
public TodoItem? GetById(int id) => _items.FirstOrDefault(i => i.Id == id);
public TodoItem Create(TodoItem item) { item.Id = _nextId++; _items.Add(item); return item; }
public TodoItem? Update(int id, TodoItem item) { var existing = GetById(id); if (existing == null) return null; existing.Title = item.Title; existing.IsCompleted = item.IsCompleted; return existing; }
public bool Delete(int id) { var item = GetById(id); if (item == null) return false; return _items.Remove(item); }}在 Program.cs 的 DI 容器中注册该服务:
<