使用 .NET 8 构建 RESTful Web API

在本文中,我将向您展示如何使用 . 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)中维护的电影数据,遵循下表中概述的结构:

本文涵盖的部分包括:

  1. 理解 REST
  2. 启动 Web API 项目
  3. 整合模型
  4. 集成数据库上下文
  5. 使用迁移建立数据库
  6. 创建 API 控制器和方法

为了继续操作,请确保您的计算机上安装了以下工具:

  1. Visual Studio 2022
  2. .NET 8.0 SDK
  3. Microsoft SQL Server Express

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

  1. 理解 REST

REST ,即表述性状态转移,是一种指导 RESTful API 开发的架构风格。

它在网络上的计算机系统之间建立标准化通信,促进无缝交互。REST 在客户端-服务器模型上运行,允许两个应用程序独立发展,而不相互依赖。

REST 的关键属性包括其无状态性 ,即请求所需的所有信息都在通信过程中传递,而无需服务器端会话状态。REST 确保组件之间具有统一的接口,并通过类似于目录结构的 URI 公开资源。

REST 虽然并非严格意义上与 HTTP 绑定,但通常与其相关。在 HTTP 中,四个主要动词控制着与 REST 系统中资源的交互:

  1. GET:检索特定资源(通过 id)或资源集合。
  2. POST:创建一个新资源。
  3. PUT:更新特定资源(通过 id)。
  4. 删除:通过 ID 删除特定资源。

REST 中的表示通常涉及JSON 或 XML 的传输,以表达数据对象及其属性。由于其简单性,REST 已经超越了基于 SOAP 的接口设计,并对 Web 开发产生了重大影响。

回顾了 REST 的基础知识后,让我们无缝过渡到实施过程。

2.启动 Web API 项目

启动 Visual Studio 2022 并按照以下步骤创建新项目:

  1. 打开 Visual Studio 2022。
  2. 选择创建新项目。
  3. 在"创建新项目"窗口中,搜索ASP.NET Core Web API。
  4. 选择ASP.NET Core Web API作为项目模板。
  5. 单击**"下一步"**按钮继续。

在下一步上:

  1. 选择**.NET 8.0**作为项目的目标框架。
  2. 单击**"创建"**按钮,使用指定的框架版本启动 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 文件夹中创建类的步骤:

  1. 在解决方案资源管理器中,右键单击该项目。
  2. 选择添加 -> 新建文件夹 并将文件夹命名为Models
  3. 右键单击新创建的Models文件夹。
  4. 选择添加 ->类别
  5. 将类命名为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 端点:

  1. GET /api/Movies
  2. GET /api/Movies/{id}

要测试应用程序,您可以使用以下 URL 从浏览器调用两个端点:

  1. https://localhost:{port}/api/movies
  2. https://localhost:{port}/api/movies/{id }

GetMovie 方法的返回类型为ActionResult<T>ASP.NET Core 会自动将该对象序列化为JSON ,并将JSON 嵌入到响应消息的正文中。如果没有未处理的异常,此返回类型的响应代码为200 。任何未处理的异常都会转换为 5xx错误。

路由和 URL 路径

每种方法的 URL 路径按以下方式组装:

  1. 从控制器的 Route 属性中的模板字符串开始**(Route("api/[controller]"))。**
  2. 将模板中的[controller] 替换为控制器的名称,并遵循控制器类名不带 Controller 后缀的约定。在本例中,控制器类名为MoviesController ,因此控制器名称为movies
  3. 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方法执行以下操作:

  1. 成功时发出HTTP 201状态代码。HTTP 201 是在服务器上建立新资源的HTTP POST方法的标准响应。
  2. 将Location 标头附加到响应中,指定最近创建的电影记录的URI 。
  3. 利用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

如果您喜欢此文章,请收藏、点赞、评论,谢谢,祝您快乐每一天。

相关推荐
csdn_aspnet9 小时前
在 .Net 8 WEBAPI 中实现实体框架的 Code First 方法
webapi·.net8
倔强的石头10610 小时前
Rust实战:使用Axum和SQLx构建高性能RESTful API
开发语言·rust·restful
凌波粒14 小时前
SpringMVC基础教程(2)--Controller/RestFul风格/JSON/数据转发和重定向
java·后端·spring·json·restful
csdn_aspnet1 天前
.Net 8 Web API CRUD 操作
webapi·.net8
小虾爬滑丫爬1 天前
.net8发布Linux 版本程序,部署到Linux服务器上
linux·.net8·打包部署
眠りたいです3 天前
基于脚手架微服务的视频点播系统-客户端业务逻辑处理部分(三)-客户端主体部分完结
c++·微服务·云原生·架构·json·restful·qt6.7
安冬的码畜日常6 天前
【JUnit实战3_29】第十八章:REST API 接口测试(上)——RESTful 风格的后端 API 的搭建
测试工具·单元测试·restful·rest api·junit 5
ArabySide6 天前
【Spring Boot】REST与RESTful详解,基于Spring Boot的RESTful API实现
spring boot·后端·restful
安冬的码畜日常6 天前
【JUnit实战3_30】第十八章:REST API 接口测试(下)—— REST API 接口的 MockMvc + JUnit 5 测试实战
测试工具·junit·单元测试·restful·rest api·junit5