在本文中,我将向您展示如何使用 . NET 8.0 中的 ASP.NET Core以及Entity Framework Core构建 RESTful Web API。
截至目前,.NET 8 是最新**长期支持 (LTS)**版本,支持期预计持续到 2026 年 11 月 10 日。
如果您喜欢此文章,请收藏、点赞、评论,谢谢,祝您快乐每一天。
示例代码:https://download.csdn.net/download/hefeng_aspnet/91997886

该 API 将监督关系数据库(特别是 SQL Server)中维护的电影数据,遵循下表中概述的结构:

本文涵盖的部分包括:
- 理解 REST
- 启动 Web API 项目
- 整合模型
- 集成数据库上下文
- 使用迁移建立数据库
- 创建 API 控制器和方法
为了继续操作,请确保您的计算机上安装了以下工具:
- Visual Studio 2022
- .NET 8.0 SDK
- Microsoft SQL Server Express
如果你准备好了,那我们就开始吧。
- 理解 REST
REST ,即表述性状态转移,是一种指导 RESTful API 开发的架构风格。
它在网络上的计算机系统之间建立标准化通信,促进无缝交互。REST 在客户端-服务器模型上运行,允许两个应用程序独立发展,而不相互依赖。
REST 的关键属性包括其无状态性 ,即请求所需的所有信息都在通信过程中传递,而无需服务器端会话状态。REST 确保组件之间具有统一的接口,并通过类似于目录结构的 URI 公开资源。
REST 虽然并非严格意义上与 HTTP 绑定,但通常与其相关。在 HTTP 中,四个主要动词控制着与 REST 系统中资源的交互:
- GET:检索特定资源(通过 id)或资源集合。
- POST:创建一个新资源。
- PUT:更新特定资源(通过 id)。
- 删除:通过 ID 删除特定资源。
REST 中的表示通常涉及JSON 或 XML 的传输,以表达数据对象及其属性。由于其简单性,REST 已经超越了基于 SOAP 的接口设计,并对 Web 开发产生了重大影响。
回顾了 REST 的基础知识后,让我们无缝过渡到实施过程。
2.启动 Web API 项目
启动 Visual Studio 2022 并按照以下步骤创建新项目:
- 打开 Visual Studio 2022。
- 选择创建新项目。
- 在"创建新项目"窗口中,搜索ASP.NET Core Web API。
- 选择ASP.NET Core Web API作为项目模板。
- 单击**"下一步"**按钮继续。

在下一步上:
- 选择**.NET 8.0**作为项目的目标框架。
- 单击**"创建"**按钮,使用指定的框架版本启动 ASP.NET Core Web API 项目的创建。

此时我们有一个启动项目如下:

在Program.cs文件中,您会发现 Swagger 支持已自动集成到我们的项目中。

此外,请注意,Swashbuckle.AspNetCore NuGet 包已作为依赖项包含在内。
要进一步了解 Swagger,请参阅带有 Swagger/OpenAPI 的 ASP.NET Core Web API 文档。
现在,使用ctrl+f5 运行项目。当浏览器打开并显示 Swagger UI 时,导航到WeatherForecast 部分,选择GET 方法,选择Try It Out ,然后单击Execute以观察默认输出。

运行应用程序时,默认 URL 来自launchSettings.json文件中指定的设置。

您观察到的结果值是由WeatherForecastController中的 GET 方法生成的。

事实上,当前值是在WeatherForecastControlle r 中通过添加随机性进行硬编码的。
在我们接下来的步骤中,我们将在Web API 中实现功能来管理存储在SQL Server 数据库中的记录,从而允许我们通过 REST API 端点执行创建、查看、更新和删除等操作。
3.整合模型
以下是在Movie Models 文件夹中创建类的步骤:
- 在解决方案资源管理器中,右键单击该项目。
- 选择添加 -> 新建文件夹 并将文件夹命名为Models。
- 右键单击新创建的Models文件夹。
- 选择添加 ->类别。
- 将类命名为Movie.cs并单击"添加"。
现在,将以下属性添加到Movie类:

数据库需要Id字段作为主键。
实体框架核心
我们将使用我们的模型和Entity Framework Core***(EF Core)***来处理数据库。
EF Core 是一个对象关系映射 (ORM) 框架,可简化数据访问代码。模型类不依赖于 EF Core。它们仅定义将存储在数据库中的数据的属性。
我们将首先创建模型类,然后EF Core 将生成数据库。这种方法通常被称为代码优先方法。

4.集成数据库上下文
数据库上下文 是协调数据模型的实体框架功能的主要类。此类是通过从Microsoft.EntityFrameworkCore.DbContext类派生而创建的。
现在,右键单击Models 文件夹,然后选择Add ->Class 。将类命名为MovieContext ,然后单击Add。然后将以下代码添加到该类中:

上面的代码建立了一个表示实体集的**DbSet<Movie>**属性。在 Entity Framework 的语言中,实体集通常与数据库表相对应,而实体对应于该表中的一行。
通过对DbContextOptions 对象的方法调用,将连接字符串的名称提供给上下文。在本地开发期间,ASP.NET Core 配置系统从 appsettings.json文件中检索连接字符串。
我们需要将连接字符串添加到appsettings.json中。我将使用机器中的本地 SQL 服务器实例,我们可以按如下方式定义连接字符串:

依赖注入
依赖注入是 ASP.NET Core 中的一个基本概念,框架就是围绕它构建的。在应用程序启动期间,包括EF Core 数据库上下文在内的服务都会注册到依赖注入中。需要这些服务的组件会通过构造函数参数接收这些服务。
接下来,我们将在内置的控制反转(IoC)容器中注册数据库上下文。在Program.cs中包含以下代码:

5. 使用迁移建立数据库
接下来,我们将利用 EF Core Migrations 功能生成数据库。
迁移使我们能够构建一个镜像数据模型的数据库,并在数据模型发生修改时调整数据库模式。
首先,我们将添加初始迁移。
打开工具->NuGet包管理器>包管理器控制台(PMC),在PMC中运行以下命令:
添加迁移初始
Add-Migration 命令生成用于建立初始数据库架构的代码,该架构源自MovieContext 类中概述的模型。Initial参数是迁移名称,可以使用任何名称。
运行该命令后,在Migrations文件夹下会创建一个迁移文件:

下一步,在 PMC 中运行以下命令:
更新数据库
Update-Database 命令运行Migrations/{time-stamp}_Initial.cs 文件中的Up方法,该方法创建数据库。
现在,我们将检查创建的数据库。打开***"视图"->"SQL Server 对象资源管理器"。***

可以看到,Movie 表和Migrations History 表自动生成。随后,迁移历史记录表中会插入一条记录,记录数据库中已执行的迁移。
6.创建 API 控制器和方法
在本部分中,我们将创建电影 API 控制器,引入相应的方法,并继续测试这些方法。
我们先来添加控制器。右键单击Controller 文件夹,选择Add -> Controller.. ,然后选择API Controller --- Empty,如下所示:

单击***"添加"***并在下一个屏幕上为您的控制器命名。

MoviesController创建如下:

显然,该类带有**[ApiController]**属性注释。此注释表示该控制器旨在处理 Web API 请求。
MoviesController 类继承自ControllerBase。
接下来,我们将通过控制器的构造函数注入上一节提到的数据库上下文。添加以下代码:

现在,我们将向控制器添加CRUD (创建、读取、更新和删除)操作方法。让我们从 GET 方法开始。
GET 方法

GetMovies 方法检索所有影片,而GetMovie(int id) 方法返回指定 Id 的影片。两者都带有 [ HttpGet ] 属性,表明它们响应的是 HTTP GET 请求。
这些方法实现了两个不同的 GET 端点:
- GET /api/Movies
- GET /api/Movies/{id}
要测试应用程序,您可以使用以下 URL 从浏览器调用两个端点:
- https://localhost:{port}/api/movies
- https://localhost:{port}/api/movies/{id }
GetMovie 方法的返回类型为ActionResult<T> 。ASP.NET Core 会自动将该对象序列化为JSON ,并将JSON 嵌入到响应消息的正文中。如果没有未处理的异常,此返回类型的响应代码为200 。任何未处理的异常都会转换为 5xx错误。
路由和 URL 路径
每种方法的 URL 路径按以下方式组装:
- 从控制器的 Route 属性中的模板字符串开始**(Route("api/[controller]"))。**
- 将模板中的[controller] 替换为控制器的名称,并遵循控制器类名不带 Controller 后缀的约定。在本例中,控制器类名为MoviesController ,因此控制器名称为movies。
- ASP.NET Core 路由不区分大小写。
测试 GetMovie 方法
转到SQL Server 对象资源管理器 并右键单击电影 表并选择查看数据:

现在,您可以通过使用"开始"( Ctrl+F5 )命令启动应用程序来测试GET端点。

然后选择第二个 GET 方法,点击Try it out,在 id 字段中输入上面提到的其中一个ID ,然后点击Execute。

如果没有项目与请求的 Id 匹配,该方法将返回404 NotFound错误代码。

POST 方法
将以下代码添加到MoviesController:

PostMovie 方法负责在数据库中生成影片记录。该代码片段表示一个HTTP POST方法,由 [ HttpPost ] 属性表示。此方法从HTTP请求的正文中检索影片记录的值。
CreatedAtAction方法执行以下操作:
- 成功时发出HTTP 201状态代码。HTTP 201 是在服务器上建立新资源的HTTP POST方法的标准响应。
- 将Location 标头附加到响应中,指定最近创建的电影记录的URI 。
- 利用GetMovie 操作来制定Location 标头的URI。
测试 PostMovie 方法
启动应用程序,然后在电影部分中选择 POST 方法。
点击试用,在请求体中输入想要添加的电影信息:

并点击执行。
响应状态代码为201(已创建),并且位置标头已添加到响应中,如下所示:

另外,我们可以从本地数据库的电影表中检查此记录:

PUT 方法
将以下代码添加到MoviesController:

PutMovie 方法旨在使用提供的 ID 修改数据库中的电影记录。该代码片段表示一个HTTP PUT方法,由 [ HttpPut ] 属性标记。此方法从HTTP 请求的正文中提取电影记录的值。必须在请求URL 和正文中提供 ID ,并且它们必须一致。根据HTTP 规范,PUT请求要求客户端传输完整的更新实体,而不仅仅是更改部分。
操作成功后,响应为204 (无内容)。
测试 PutMovie 方法

然后单击***"执行"***。

我们也可以在数据库中看到更新的信息:

如果我们尝试更新数据库中不存在的记录,则会收到404 Not Found错误:
DELETE 方法
将以下代码添加到MoviesController:

DeleteMovie 方法用于从数据库中删除具有指定 Id 的电影记录。该代码段表示一个HTTP DELETE方法,由 [ HttpDelete ] 属性表示。此方法会预测 URL 中是否存在该 Id,以精确定位要删除的电影记录。
测试 DeleteMovie 方法
启动应用程序,然后在电影部分中选择 DELETE 方法。
点击尝试一下,在 id 字段中输入想要删除的电影的Id:

然后单击***"执行"。***

此操作无需提供请求体,响应状态为204 No Content,表示删除操作执行成功。
我们也可以从数据库中检查该记录是否已被删除:

示例代码:https://download.csdn.net/download/hefeng_aspnet/91997886
如果您喜欢此文章,请收藏、点赞、评论,谢谢,祝您快乐每一天。