.NET 6.0 教程中的 Web API:如何构建 CRUD 操作

言鼎科技 2023-06-11 224

介绍

在本教程中,我们将构建使用实体框架核心和 SQL 来创建 API 端点的 .NET 6 Web API。它将允许客户端在 API 中对存储在数据库中的数据执行 CRUD 操作。

在我们的演示应用程序中,我们将使用数据库优先方法。我们将从在 SQL 数据库中创建一个表开始,然后使用一个实体框架来创建 DBContext 和模型。

什么是网络 API?

Web API 或应用程序编程接口是一个平台,旨在开发可由各种客户端应用程序(如移动设备、Web 浏览器和桌面应用程序)访问的 HTTP 服务。它充当多个应用程序交换数据和相互交互的媒介。开发人员可以创建可通过 HTTP 调用 API 请求的函数。此功能允许您为客户保存或检索数据,使他们能够执行某些任务并访问通过 API 提供给他们的特定信息。

API的主要特点

  • 支持 GET、POST、PUT、DELETE 等 HTTP 动词,允许客户端对数据执行不同的操作

  • 支持默认响应,例如 XML 和 JSON,这些标准格式有助于在客户端和服务器之间交换数据。

  • API 可以定义自定义数据,允许您根据客户要求定制数据

  • API 可以自行托管或由第三方托管,这意味着您可以灵活地使用它们。

  • 它允许轻松授权和身份验证,这有助于控制对 API crud 操作的访问并保护您的数据。

  • API 是构建 RESTful 服务的理想平台,用于设计可扩展、灵活且易于维护的 Web 服务。

为什么我们需要 Web API?

现在人们使用多种设备,例如智能手机、平板电脑和 iPhone;因此,要覆盖所有用户,需要的不仅仅是基于网络的应用程序。我们需要一个 API 来将所有这些服务数据公开给所有不同的设备应用程序和浏览器。加入一个web API项目可以更容易地桥接两端,更容易管理和更新。

在这种情况下,我们需要一个 Web API 来管理网站、Android 应用程序和 iOS 应用程序之间的数据库交互和业务逻辑。

所有三个应用程序都可以通过 Web API 项目与数据库通信,该项目处理所有数据库交互并确保无法通过网站或应用程序直接访问数据库。

通过使用 Web API,我们可以确保不同应用程序和设备之间安全高效的通信,使其成为现代应用程序开发中必不可少的工具。

.NET 6 中有哪些新功能?

让我们来看看一些主要亮点。

  • 热重载允许开发人员在应用程序仍在运行时修改用户界面。更改会实时反映出来,无需重新构建或启动应用程序。

  • 使用 Startup 或 Program 类中“EndpointConcentionBuilder”的扩展方法,开发人员无需模板或控制器即可构建轻量级服务的最小 API 。

  • HTTP 日志记录中间件可以记录 HTTP 请求和响应信息,如标头、正文和属性,以增强调试和监控

  • 用于使用 c# 构建交互式 Web 应用程序的Blazor Web 框架改进了性能、事件绑定和对预呈现组件的支持。

  • ASP.NET Core 程序和 Startup 类合并,简化了代码结构。

  • 通过与 Kubernetes 和其他云平台的集成支持云原生开发

  • 通过引入新的源生成器增强 JSON 支持

  • .NET Core 现在改进了对 gRPC 和 GraphQL API 的支持。
    OpenSSL 3 的使用和对运行时纵深防御缓解措施的支持增强了 .NET 核心的安全性。

  • 在 Windows、macOS 和 Linux 上支持无需提取的单文件应用程序。

  • 重写的 FileStream 提高了 I/O 操作的性能,尤其是文件 I/O。

  • 使用新的源代码生成器框架改进了源代码生成。

  • 改进的 .NET MAUI(多平台应用程序用户界面)支持构建跨平台移动和桌面应用程序。

  • 对 .NET 运行时的改进包括增强的垃圾收集、改进的基于 ARM 的平台性能和硬件内在支持。

  • Entity Framework Core改进了对 Cosmos DB 的支持和用于查询嵌套 JSON 数据的新 LINQ 语法。

  • Visual Studio 工具已通过新项目模板和与 GitHub 的集成得到改进。

先决条件:.NET 6.0 中的 Web API

  • 视觉工作室 2022。

  • .NET SDK 6.0。

  • SQL服务器。

    • 创建项目

      启动 Visual Studio 并创建一个类型为ASP.NET Core Web API的新项目,然后单击下一步。输入项目名称ProductCrudAPI,选择要保存项目的位置,然后单击下一步。选择.Net 6.0(长期支持)作为框架。如下图所示填写所需信息,然后单击“创建”。单击创建后,将创建一个 Web API 项目。添加 NuGet 包

      要在我们的项目中使用实体框架核心,我们需要安装两个 NuGet 包:

      • Microsoft.EntityFrameworkCore.工具

      • Microsoft.EntityFrameworkCore.SqlServer

        • 按照以下说明安装NuGet 包。
          右键单击依赖项并选择管理 NuGet 包。
          Microsoft.EntityFrameworkCore.Tools

          选择浏览选项卡并搜索Microsoft.EntityFrameworkCore.Tools并安装其最新的稳定版本。Microsoft.EntityFrameworkCore.SqlServer

          安装上述包后,搜索Microsoft.EntityFrameworkCore.SqlServer并安装其最新的稳定版本。创建 SQL 数据库和表。

          转到 .NET 6.0 教程中 Web API 的下一部分,在 SQL 中创建新数据库ProductDB,并执行以下脚本来创建Product表。

          使用 [产品数据库]去设置 ANSI_NULLS去设置 QUOTED_IDENTIFIER ON去创建表 [dbo].[产品](
          [Id] [int] IDENTITY(1,1) NOT NULL,
          [名称] [varchar](50) 不为空,
          [说明] [varchar](250) NULL,
          [价格] [十进制](18, 2) NOT NULL,主键集群(
          [编号] ASC)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]) 在 [主要]去

          创建数据库上下文和模型

          现在,让我们继续我们的 Web API 教程的下一步,我们将在其中创建 DBContext 和模型。

          我们正在使用实体框架的数据库优先方法。
          我们已经创建了一个数据库表,并使用了实体框架的Scaffold-DbContext命令;我们将在 C# 项目中创建所需的类。

          打开包管理器控制台(工具 => 包管理器 => 包管理器控制台)并运行以下命令:

          脚手架-DbContext“Server=SERVERNAME;Database=ProductDB;Integrated Security=True”Microsoft.EntityFrameworkCore.SqlServer -OutputDir 模型

          代替服务器名称使用您的数据库服务器名称。执行此命令后,将在项目解决方案中创建模型文件夹。模型文件夹包含两个文件,ProductDBContext.csProduct.cs。ProductDBContext.cs负责数据库交互,Product.cs是Products表的模型。

          从 ProductDBContext.cs 中删除OnConfiguring()方法;它包含一个数据库连接字符串,这不是一个好习惯。我们将在 appsettings.json 文件中添加连接字符串。

          同时从此文件中删除ProductDBContext()构造函数。

          使用 Bacancy,构建 .NET 应用程序更轻松、更轻松!
          聘请NET 开发人员,他们将帮助您有效地满足您的项目要求,并具有值得称道的问题解决能力。

          配置数据库连接

          在appsettings.json文件中添加数据库连接字符串。

          {
           “记录”:{
             “日志级别”:{
               “默认”:“信息”,
               “Microsoft.AspNetCore”:“警告”
             }
           },
           "允许的主机": "*",
           “连接字符串”:{
             “ProductDB”:“服务器=SERVERNAME;数据库=ProductDB;集成安全性=True;”
           }}

          将SERVERNAME替换为您的数据库服务器名称。

          由于我们使用的是 .Net 6 版本,因此我们需要在Program.cs文件中进行所需的配置更改。微软在.Net 6中淘汰了Startup.cs。在之前的.Net版本中,Startup.cs用于配置。

          在 Program.cs 中添加以下行请参考下图。

          var connectionString = builder.Configuration.GetConnectionString("ProductDB");builder.Services.AddDbContextPool(选项=>选项.UseSqlServer(connectionString));

          此外,在 Program.cs 的顶部添加以下行

          使用 Microsoft.EntityFrameworkCore;使用 ProductAPI.Models;

          添加产品控制器

          在控制器文件夹下添加一个新的空 API 控制器ProductsController.cs 。

        •  空置不是一种选择。Bacancy是一个可靠的选择!

        • 您是否正在寻找一家领先的NET 开发公司来开发您梦寐以求的产品?我们在这里为您服务!相信你的选择。立即连接!

          在 ProductsController 中添加方法

          ProductsController.cs 中,我们将添加 GET、POST、PUT 和 DELETE 端点以实现 CRUD 操作。

          请在您的 ProductsController.cs 中使用以下代码

          使用 Microsoft.AspNetCore.Mvc;使用 Microsoft.EntityFrameworkCore;使用 ProductCRUDAPI.Models;命名空间 ProductCRUDAPI.Controllers{
             [路线(“API/[控制器]”)]
             [API控制器]
             公共类 ProductsController : ControllerBase
             {
                 私有只读 ProductDBContext _context;
                 公共 ProductsController(ProductDBContext 上下文)
                 {
                     _context = 上下文;
                 }
                 [HTTPGet]
                 公共异步任务<IEnumerable<Product>> Get()
                 {
                     返回 await _context.Products.ToListAsync();
                 }
                 [HttpGet("{id}")]
                 公共异步任务<IActionResult> Get(int id)
                 {
                     如果 (id < 1)
                         返回 BadRequest();
                     var product = await _context.Products.FirstOrDefaultAsync(m => m.Id == id);
                     如果(产品==空)
                         返回未找到();
                     返回确定(产品);
                 }
                 [HttpPost]
                 公共异步任务<IActionResult> 发布(产品产品)
                 {
                     _context.Add(产品);
                     等待 _context.SaveChangesAsync();
                     返回确定();
                 }
                 [HTTPPut]
                 公共异步任务<IActionResult> Put(Product productData)
                 {
                     如果(productData == null || productData.Id == 0)
                         返回 BadRequest();
                     var product = await _context.Products.FindAsync(productData.Id);
                     如果(产品==空)
                         返回未找到();
                     product.Name = productData.Name;
                     product.Description = productData.Description;
                     product.Price = productData.Price;
                     等待 _context.SaveChangesAsync();
                     返回确定();
                 }
                 [HttpDelete("{id}")]
                 公共异步任务<IActionResult>删除(int id)
                 {
                     如果 (id < 1)
                         返回 BadRequest();
                     var product = await _context.Products.FindAsync(id);
                     如果(产品==空)
                         返回未找到();
                     _context.Products.Remove(产品);
                     等待 _context.SaveChangesAsync();
                     返回确定();
                 }
             }}

          启动API

          最后,我们完成了 .NET 6.0 中的 Web API 教程。现在,是启动此 API 的时候了,请按 F5。由于我们使用的是 Swagger UI,我们可以直接执行 API。

          我们可以在 Products 下看到 GET、POST、PUT 和 DELETE。我们可以从此页面本身执行不同的 API 方法。

          Github 存储库:.NET 6.0 示例中的 Web API

          下面是.NET 6.0 示例中 Web API 的源代码。随意克隆存储库并使用代码。开始开发您的演示应用程序并了解如何构建 CRUD 操作。

          结论

          所以,这就是关于如何在 .NET 6.0 中开发 Web API 的全部内容。我希望本教程能帮助您开始使用 .NET 构建基本的 CRUD 操作应用程序。如果您有任何问题或反馈,请随时与我们联系。

                            言鼎科技

The End