示例数据和过滤 - 用 C# 构建示例 API
[[academy-video-youtube({"vid": "gxtdkoWfngQ", "start_time": "0", "title": "示例数据和筛选 - 在 C# 中构建示例 API", "creator": "Tim Corey", "length": "42分43秒"})]]
在当今的网络开发工作中,一个重要的工具就是 Web API 样本--您可以用它来测试前端网络应用程序、移动设备甚至软件应用程序。 在"示例数据和过滤 - 在 C# 中构建示例 API"的详细视频中,Tim Corey 指导我们创建一个 C# Web API,该 API 可从 JSON 文件加载示例数据、设置过滤并准备作为 Docker 容器或传统 Web 应用程序进行部署。
在这篇文章中,我们将逐步探索Tim的方法,并解释ASP.NET Core Web API、Minimal APIs和HTTP服务的核心概念。
示例 Web API 简介
Tim 首先解释了为什么创建一个新的 Web API 项目对开发人员如此重要。 无论您是为移动设备、网络应用程序还是其他软件应用程序进行开发,拥有一个轻量级的示例 API 都能让测试变得更快、更顺畅。
Tim 表示,在项目结束时,我们将拥有
使用 ASP.NET Core 和 .NET Core 的最小 API、
支持 OpenAPI(Swagger UI)的 API 文档、
健康检查、
模拟错误和减速、
- 在 Docker 容器和 VPS 服务器中部署。
这个小项目将使开发人员能够通过 GET、PUT、POST 和 DELETE 等 HTTP 方法与 HTTP 服务轻松交互。
设置项目和示例数据
Tim 首先在 Visual Studio(微软流行的集成开发环境)中构建了 Web API 项目。
1:07 时,Tim 创建了一个新的 Data 文件夹并添加了 courseData.json 文件。他提到,他的实时网站 timcorey.com 也使用了类似的系统--只是在幕后有一个大的 JSON 文件,充当网络服务。
Tim 设置的要点:
使用 JSON 文件作为示例数据,以避免需要数据库或Entity Framework。
避免使用 SQL 服务器等附加服务,保持容器的小型化。
- 数据不可更改--无需存储更改; 只需在需要时重置数据即可。
这一选择反映了使用现有资源的 REST(表征状态转移)原则。
了解课程数据结构
Tim 仔细讲解了示例 JSON 文件的结构:
ID (整数)、
预购(布尔型)、
课程 URL(字符串)、
课程类型(字符串)、
名称、课时、课程长度(小时数)、
说明、图片 URL、
价格(美元)、
- 预览链接。
Tim 在 3:29 时解释说,所有定价均以美元为基准; 不过,地方税(增值税)可能会改变最终价格。
每个字段随后都会映射到 C# 中的一个模型类--这是构建 ASP.NET Web API 的基础元素。
创建课程模型类
进入 .NET Core 编码后,Tim 在一个新的 Models 文件夹中创建了一个 CourseModel.cs 文件。
在 4:47 处,他使用 Visual Studio 的 "Paste Special > Paste JSON as Classes"(粘贴特例 > 将 JSON 粘贴为类)来立即根据 JSON 结构构建一个类。 Tim 指出:
正确的 PascalCase 命名(对 C# Web API 很重要)、
必填字符串与可归零字符串(6:02)、
- 避免在使用空字符串的情况下存储空值。
创建一个强大的模型类对于实现客户端和服务器之间的数据通信至关重要。
将数据加载到内存中
Tim 继续创建了一个 CourseData.cs 类,用于管理将课程列表加载到内存中的过程。
关键步骤
使用 System.Text.Json 进行反序列化、
设置 PropertyNameCaseInsensitive = true (8:04) 以将 camelCase JSON 映射到 PascalCase C# 字段、
使用 Path.Combine(9:04)进行跨平台文件访问、
- 在处理 Linux 服务器时确保大小写敏感性(9:59)。
课程被加载到一个公共 List<CourseModel> 属性中,以确保快速访问而无需重复点击数据库。
Tim 在 11:04 强调,如果反序列化失败,将创建一个新的空列表,以防止空引用错误--这是构建健壮的 API 时的最佳实践。
在依赖注入中注册课程数据
接下来,Tim 演示了如何在服务容器中使用 AddTransient 注册 CourseData 类。
他解释说,尽管数据是只读的,但使用瞬时服务可以避免意外修改问题。 这种方法符合现代 ASP.NET Core Web API 开发标准。
创建课程端点
14:03 时,Tim 开始为示例 API 构建端点:
在 /courses 处使用 GET 方法检索所有课程、
- 扩展方法 AddCourseEndpoints 可使代码更简洁。
这种模块化方法简化了 Web API 项目的扩展,是管理大型 HTTP 服务或多个端点时必不可少的技术。

Tim 还将启动 URL 设置为 Swagger UI,以便于测试。
故障排除:数据类型不匹配
在测试新端点时,Tim 遇到了与 CourseLengthInHours 字段相关的状态代码错误。 他意识到有些课程的学时是小数(如 2.5),需要用 double 代替 int。
Tim 纠正了 CourseModel,展示了在使用外部网络资源时进行全面错误检查和尊重数据类型的价值。
使用 ID 查询改进 API.
Tim 扩展了功能:
LoadAllCourses 可检索所有课程、
- LoadCourseById 可按 ID 查找课程。
他通过检查课程是否存在来改进错误处理。 如果没有,Tim 会使用 return NotFound() - 向客户端返回一个适当的 HTTP 状态代码。
这符合 RESTful 架构风格的实践,其中每个 HTTP 方法都清楚地传达了操作结果。
添加课程类型过滤和搜索
仅有简单的 GET 方法是不够的--真正的网络服务需要过滤功能。
Tim 增强了 LoadAllCourses 的功能,使其能够接受查询参数:
courseType(字符串)、
- 搜索(字符串)。
他解释了如何使用 String.IsNullOrWhiteSpace 安全地处理可选参数。
按课程类型筛选时使用了 RemoveAll 和 String.Compare,忽略了大小写差异。 搜索课程名称和简短描述时使用 .Contains,不区分大小写。
Tim 测试的场景包括
筛选 "大师课程
搜索 "web "或 "SQL
- 将搜索和课程类型相结合,以获得更精确的结果
这将为跨网络应用程序、移动应用程序或通过 HTTP 通信的客户端的用户提供全面的交互体验。有关详细信息,请参阅完整的 视频。
最终想法和下一步
课程结束时,Tim 已创建了以下内容:
可运行的 ASP.NET Core Web API、
过滤和搜索功能、
正确处理错误(NotFound、Ok 等)、
- 支持 Swagger UI 和 OpenAPI 文档。
蒂姆预告,接下来他将处理跨源资源共享(CORS)问题--这对于允许互联网客户端和不同域自由访问 API 至关重要。
最后,Tim 鼓励大家:编程有时会遇到障碍,但它会带来回报。
结论
按照 Tim Corey 的视频,您可以在 Visual Studio 中创建一个新的 Web API 项目、加载示例数据、构建端点并实现强大的过滤功能--所有这些都基于 RESTful 原则和 ASP.NET Core Standard 标准。
无论您是测试网页、为移动设备构建 API 还是使用现有资源,这种设置都能确保通过 HTTP 方法快速、可靠地访问数据。
在 .NET Core 中不断练习这些模式,很快您就能创建强大的网络服务,在客户端、服务器和互联网之间顺畅通信!




