使用 .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

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

相关推荐
爱上妖精的尾巴1 天前
7-10 WPS JS宏 对象使用实例7--拆分单表到多工作簿下的多表
javascript·restful·wps·jsa
AIFQuant2 天前
2026 澳大利亚证券交易所(ASX)API 接入与 Python 量化策略
开发语言·python·websocket·金融·restful
咋吃都不胖lyh3 天前
RESTful API 调用详解(零基础友好版)
后端·restful
Sally璐璐3 天前
RESTful与RPC接口终极对比指南
后端·rpc·restful
AIFQuant4 天前
2026 越南证券交易所(VN30, HOSE)API 接口指南
大数据·后端·python·金融·restful
小鸡脚来咯4 天前
RESTful API 面试详解
后端·面试·restful
laufing5 天前
flask_restx 创建restful api
python·flask·restful
禹曦a7 天前
Java实战:Spring Boot 构建电商订单管理系统RESTful API
java·开发语言·spring boot·后端·restful
末日汐7 天前
库的制作与原理
linux·后端·restful
2501_921649497 天前
主流金融数据API对比:如何获取精准、及时的IPO数据
开发语言·python·金融·restful