使用 ASP.NET Core 6.0 构建 RESTful Web API 及 示例代码下载

示例代码:https://download.csdn.net/download/hefeng_aspnet/89961212 

在这篇文章中,将演示如何使用 ASP.NET Core 6.0 和 Entity Framework Core 构建 RESTful Web API。

.NET 6 是目前最新的 LTS(长期支持)版本,将支持到 2024 年 11 月 12 日。

该 API 将管理存储在关系数据库(SQL Server)中的电影记录,如下表所述:

本文内容如下:

  • 什么是 REST?
  • 创建 Web API 项目
  • 添加模型
  • 添加数据库上下文
  • 使用迁移创建数据库
  • 创建 API 控制器和方法

我们的计算机上需要安装以下工具:

如果你准备好了,那我们开始吧。

什么是 REST?

RESTful API 符合 REST 架构风格。

REST,即REST表现是一种在网络上的计算机系统之间提供标准的架构风格,使得系统之间更容易相互通信。

REST 依赖于客户端-服务器关系。这实质上意味着客户端应用程序和服务器应用程序必须能够独立发展,彼此之间不具有任何依赖性。

REST 是无状态的。这意味着客户端和服务器之间的通信始终包含执行请求所需的所有信息。服务器中没有会话状态,它完全保存在客户端。

REST 为组件之间提供了统一的接口。资源公开了类似目录结构的 URI。

REST 与 HTTP 并非严格相关,但通常与之相关联。我们在请求中使用四个基本 HTTP 动词来与 REST 系统中的资源进行交互:

  • GET — 检索特定资源(通过 id)或资源集合
  • POST — 创建新资源
  • PUT — 更新特定资源(通过 id)
  • DELETE — 根据 ID 删除特定资源

在 REST 系统中,表示传输JSONXML来表示数据对象和属性。

REST 对 Web 的影响如此之大,它已经基本取代了基于 SOAP 的界面设计,因为它是一种使用起来相当简单的风格。

现在我们已经对 REST 进行了快速回顾,我们可以继续实施了。

创建 Web API 项目

打开 Visual Studio 2022 并选择创建新项目,然后选择ASP.NET Core Web API

并在以下屏幕中为您的项目命名,然后单击下一步

在下一个屏幕中,选择.NET 6.0作为框架,然后单击创建

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

默认项目结构

Program.cs中,我们看到 Swagger 支持已自动添加到我们的项目中:

最初创建 Program.cs

并且还将Swashbuckle.AspNetCore NuGet 包添加为依赖项。

有关 Swagger 的更多信息,请参阅带有 Swagger/OpenAPI 的 ASP.NET Core Web API 文档

现在,让我们运行(Ctlr+F5)项目以查看默认输出。当浏览器打开并显示 Swagger UI 时,选择WeatherForecast部分中的GET方法,然后选择Try It Out and Execute

浏览器中的 Swagger UI

另外,您可以使用 Swagger UI 中显示的 curl URL 来执行此方法,并在浏览器中查看该 URL 的结果:

当我们运行应用程序时,默认 URL 来自launchSettings.json

launchSettings.json

结果值来自 WeatherForecastController 的 GET方法

WeatherForecatController.cs

如您所见,这里的值是硬编码的,并且添加了随机性以生成不同的值。

在我们的 Web API 中,我们将在 SQL 服务器数据库中创建自己的记录,并能够通过 REST API 端点查看、更新和删除它们。

添加模型

现在,我们将实现我们的数据模型类。

解决方案资源管理器中,右键单击项目。选择添加->新文件夹,并将文件夹命名为模型

然后右键单击Models文件夹并选择Add->Class将类命名为Movie.cs 并单击Add

接下来,向类添加以下属性:

Movie.cs

Id字段是数据库的主键所必需的。

实体框架核心

我们将使用我们的模型和Entity Framework Core (EF Core)来处理数据库。

EF Core 是一个对象关系映射 (ORM) 框架,可简化数据访问代码。模型类对 EF Core 没有任何依赖。它们仅定义将存储在数据库中的数据的属性。

在这篇文章中,我们将首先编写模型类,然后EF Core将创建数据库。这称为代码优先方法

让我们将 EF Core NuGet 包添加到项目中。右键单击项目并选择管理 NuGet 包…,然后安装以下包:

NuGet 包管理器

添加数据库上下文

数据库上下文是协调数据模型的实体框架功能的主要类。此类是通过从Microsoft.EntityFrameworkCore.DbContext类派生而创建的。

现在,右键单击该Models文件夹并选择Add ->Class。将类命名为MovieContext并单击Add。然后将以下代码添加到该类中:

MovieContext.cs

更新(2023 年 8 月 26 日):您需要public在上面一行中添加关键字,如下所示: 

public DbSet<Movie> Movies { get; set; } = null!; 

上述代码DbSet<Movie>实体集创建了一个属性。

在实体框架术语中,实体集通常对应于数据库表,实体对应于表中的一行。

通过调用对象上的方法将连接字符串的名称传递到上下文中DbContextOptions。对于本地开发,ASP.NET Core 配置系统从appsettings.json文件中读取连接字符串。

我们需要将连接字符串添加到appsettings.json中。我将在我的机器中使用本地 SQL 服务器实例,我们可以按如下方式定义连接字符串:

appsettings.json

如果需要,您可以更改数据库名称。

依赖注入

ASP.NET Core 使用依赖注入 (DI)构建。服务(例如 EF Core DB 上下文)在应用程序启动时向 DI 注册。需要这些服务的组件通过构造函数参数提供这些服务。

现在,我们将数据库上下文注册到内置的 IOC 容器。将以下代码添加到Program.cs

Program.cs

使用迁移创建数据库

现在,我们将使用 EF Core Migrations功能创建数据库。

迁移让我们可以创建一个与我们的数据模型相匹配的数据库,并在数据模型发生变化时更新数据库模式。

首先,我们将添加初始迁移。

打开工具 -> NuGet 包管理器 > 包管理器控制台 (PMC),并在 PMC 中运行以下命令:

Add-Migration Initial

该命令生成代码以创建初始Add-Migration数据库模式,该模式基于MovieContext类中指定的模型。Initial参数是迁移名称,可以使用任何名称。

运行命令后,在Migrations文件夹下会创建一个迁移文件:

 初始迁移文件

接下来在 PMC 中运行以下命令:

Update-Database

Update-Database命令运行Migrations/{time-stamp}_Initial.csUp文件中的方法,创建数据库。

现在,我们将检查创建的数据库。打开视图 -> SQL Server 对象资源管理器。

您将看到新创建的数据库,如下所示:

SQL Server 对象资源管理器

如您所见,Movie表和Migrations History表已自动创建。然后在迁移历史表中插入一条记录,以显示数据库中已执行的迁移。

创建 API 控制器和方法

在本节中,我们将创建电影 API 控制器并向其中添加方法,同时还将测试这些方法。

我们先添加控制器。右键单击Controller文件夹并选择Add -> Controller..,然后选择API Controller - Empty,如下所示:

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

 MoviesController创建如下:

MoviesController.cs

如您所见,该类用属性修饰。此属性表示控制器响应 Web API 请求。[ApiController]

MoviesController类继承自ControllerBase。

接下来我们通过控制器的构造函数注入上一节提到的数据库上下文。添加以下代码:

MoviesController.cs

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

GET 方法

将以下代码添加到MoviesController

GET 方法

GetMovies方法返回所有电影,方法返回具有输入所给IdGetMovie(int id)的电影。它们用[HttpGet]属性修饰,表示方法响应 HTTP GET 请求。

这些方法实现了两个 GET 端点:

  • 获取 /api/电影
  • 获取 /api/Movies/{id}

我们可以通过从浏览器调用两个端点来测试应用程序,如下所示:

  • https://localhost:{port}/api/movies
  • https://localhost:{port}/api/movies/{id}

方法的返回类型GetMovieActionResult<T> 类型。ASP.NET Core 会自动将对象序列化为JSON ,并将 JSON 写入响应消息的正文中。假设没有未处理的异常,此返回类型的响应代码为200 。未处理的异常将转换为5xx错误。

路由和 URL 路径

每种方法的URL路径构造如下:

从控制器的 Route 属性中的模板字符串开始 ( Route("api/[controller]"))。然后将其替换[controller]为控制器的名称,按照惯例,该名称是控制器类名减去Controller后缀。对于此示例,控制器类名为MoviesController,因此控制器名为movies

ASP.NET Core路由不区分大小写。

测试 GetMovie 方法

现在我们将测试这些端点。在此之前,让我们将一些电影记录插入到表中。

转到SQL Server 对象资源管理器并右键单击电影表并选择查看数据

然后手动向表中添加一些电影记录:

我们不需要为Id列添加数据,因为 SQL Server 会自动为我们处理。

现在,我们可以测试 GET 端点。启动(Ctlr+F5)应用程序:

选择第一个 GET 方法并点击Try it out -> Execute

这将显示应用程序中的所有电影。

接下来,单击第二个 GET 方法并单击“试用” ,在id字段中输入上面的某个Id,然后单击“执行”

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

POST 方法

将以下代码添加到MoviesController

POST 方法

PostMovie方法在数据库中创建电影记录。上述代码是 HTTP POST 方法,如[HttpPost]属性所示。该方法从 HTTP 请求的正文中获取电影记录的值。

方法CreatedAtAction

  • 如果成功,则返回HTTP 201状态代码。HTTP 201 是在服务器上创建新资源的 HTTP POST 方法的标准响应。
  • Location向响应添加标头。Location标头指定新创建的电影记录的 URI。
  • 引用GetMovie操作来创建Location标头的 URI。

测试 PostMovie 方法

启动应用程序,然后在电影部分中选择 POST 方法。

点击试用,在请求体中输入想要添加的电影信息:

并点击执行

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

我们可以将此位置 URL 粘贴到浏览器中并查看那里的响应:

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

PUT 方法

将以下代码添加到MoviesController

PUT 方法

PutMovie方法使用给定的Id更新数据库中的电影记录。 上述代码是 HTTP PUT 方法,如 [ HttpPut ] 属性所示。该方法从 HTTP 请求的正文中获取电影记录的值。您需要在请求 URL 和正文中提供Id,并且它们必须匹配。根据 HTTP 规范,PUT 请求要求客户端发送整个更新的实体,而不仅仅是更改。

如果操作成功,则响应为204(无内容) 。

测试 PutMovie 方法

启动应用程序,然后在电影部分中选择 PUT 方法。

点击试用,在请求体中输入需要更新的电影信息,在id字段中输入电影的Id

然后单击“执行”

我们可以通过 Swagger UI 中的 GET 方法使用 Id 检查电影的更新状态,也可以直接从浏览器中检查,如下所示:

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

Movies

如果我们尝试更新数据库中不存在的记录,我们会收到404 Not Found错误:

DELETE 方法

将以下代码添加到MoviesController

DeleteMovie方法删除数据库中具有给定Id 的电影记录。 上述代码是 HTTP DELETE 方法,如 [ HttpDelete ] 属性所示。此方法需要URL 中的Id来标识我们要删除的电影记录。

测试 DeleteMovie 方法

启动应用程序,然后在电影部分中选择 DELETE 方法。

点击尝试一下,然后在id字段中输入要删除的电影的Id

然后单击“执行”。

您可能已经注意到,我们不需要提供请求主体。响应状态为204 无内容。

如果我们尝试使用浏览器获取此电影记录,我们会收到预期的404 Not Found错误:

我们也可以从数据库中检查该记录是否已被删除:

这篇文章到此结束。你可以在这个示例代码中找到完整的项目。

我希望这篇文章对你有帮助,并且易于理解。如果你有任何更正和/或问题,请在下面的评论中告诉我。

如果你喜欢这篇文章,请点赞、收藏,谢谢。

参考

https://www.codecademy.com/articles/what-is-rest

IBM Developer

https://ninenines.eu/docs/en/cowboy/2.6/guide/rest_principles/

https://restfulapi.net/rest-architectural-constraints/

Tutorial: Create a web API with ASP.NET Core | Microsoft Learn

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

csdn_aspnet

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值