当前位置: 首页 > news >正文

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

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

http://www.dtcms.com/a/610031.html

相关文章:

  • Servlet进阶
  • 计算机视觉——图像数据增强从原理到落地的全解析
  • 【MATLAB例程】2雷达二维目标跟踪滤波系统-UKF(无迹卡尔曼滤波)实现,目标匀速运动模型(带扰动)。附代码下载链接
  • yolov5/8/9/10/11/12/13+deep-oc-sort算法的目标跟踪实现
  • 网站维护花费个人备案网站做app
  • 用Scrapyd爬取豆瓣图书Top250
  • 数据分析笔记06:假设检验
  • 【论文阅读17】-LLM-TSFD:一种基于大型语言模型的工业时间序列人机回路故障诊断方法
  • Elasticsearch 面试题精编(26题|含答案|分类整理)
  • 专业格泰网站建设宝塔 怎么做网站
  • app做好了网站怎么做1千万人网站维护成本
  • 网站设计价格大概多少宁波seo关键词优化服务
  • AIGC总结二:Stable Diffusion 的训练方式、使用流程、硬件要求、实际应用场景
  • 大疆Action 6 ,pocket3及 action 5 Pro 该如何选择?
  • 银川网站开发培训案例分析网站
  • 谷歌云数据库服务概览:关系型与 NoSQL 的多元选择与应用场景解析
  • 自动驾驶环境下的多目标检测与识别_YOLOv8改进实践
  • 运动学模型推导 + 离散化 + 工程化版本(适用于前方单舵轮 AGV / 自动驾驶 / MPC)
  • 微信小程序中 WebView 组件的使用与应用场景
  • UE5导入的CAD文件零件如何被Merge?
  • 从无形IP到AI万象,安谋科技Arm China“周易”X3 NPU 发布!
  • 微信小程序可以做视频网站吗滑坡毕业设计代做网站
  • Windows 下 Eclipse + MinGW 写 C++ 环境
  • 美国税务表格W-2/1099/W-9/W-4/I-9详解:中国投资者跨境经营合规与战略指南
  • 外贸网站如何推广优化网站备案号取消原因
  • MySQL 查看有哪些表
  • 衡水做网站推广找谁wordpress 图片托管
  • 第一章 函数与极限 7.无穷小的比较
  • CMake 中 install 的使用原因和使用方法
  • 网站宝 添加二级域名怎样在工商局网站做申请登记