在 .NET 6.0 中创建用于 CRUD 操作的 Web API

快速概述:
在动态的技术世界中,创建强大的 Web API 已成为开发人员不可或缺的关键技能。这些 API 是促进不同应用程序之间顺畅通信的重要链接,可实现无缝数据检索和操作。本文的重点是在 .NET 6 中为 CRUD 操作创建 Web API。

为了实现这一点,我们将利用 .NET 6.0 的强大功能,这是科技巨头微软提供的先进且尖端的框架。在开始这段旅程之前,让我们确保全面了解 .NET 6 Web API 最佳实践究竟包含哪些内容。因此,让我们从对其进行详细探索开始。 

什么是 .NET 6 Web API?

NET 6  Web API 是一个先进的框架,一个精心设计的创新框架,用于构建针对 Web 应用程序个性化的弹性应用程序编程接口。ASP.NET Core 为 dotnet 6 提供了基础,它提供了高性能和跨平台功能,使其成为现代 Web 开发的理想选择。

从早期版本过渡而来,.NET 6 Web API 引入了重大改进,提高了开发人员的效率和生产力。借助 dotnet 6,开发人员可以享受热重载功能,该功能使他们可以立即应用代码更改,而无需在开发过程中重新启动应用程序。它还具有强大的诊断和测试工具,可快速解决问题,促进团队合作并提高代码质量。 

此外,您可以控制 API CRUD 操作,并通过授权和身份验证实施来保护您的数据。

Web 服务中的 CRUD 是什么?

CRUD 是创建、读取、更新和删除的首字母缩写词。它说明了可以对数据执行的四个主要操作:

  • 创建或 C:向数据库添加新数据或记录。
  • 读取或 R:从数据库中检索或获取现有数据。
  • 更新或 U:修改数据库中现有数据。
  • 删除或 D:从数据库中删除数据。

这些操作代表通过 Web API 与存储在数据库或数据源中的数据交互所需的基本功能。

什么是 Get、Post、Put 和 Delete 方法?

在.NET 开发中,要与服务器交互,通常使用的 HTTP 方法是 GET、POST、PUT 和 DELETE。它们对于传输和检索数据至关重要。在讨论 CRUD 和 HTTP 方法之间的差异之前,了解每种方法的具体情况至关重要。

  • 获取:从 Web 服务器检索数据。
  • Post:将数据提交到 Web 服务器上的特定资源进行处理。
  • 放入:用新信息更新或替换服务器上的现有数据。
  • 删除:从 Web 服务器中删除特定资源。

CRUD 与 Get Post Put Delete (HTTP 方法)

CRUD 和 HTTP 方法的主要区别在于它们的范围和目的:

CRUD 是一个更高级别的概念,表示管理应用程序或系统内数据的四种基本操作。相比之下,HTTP 方法是在 Web API 和 Web 服务环境中执行这些 CRUD 操作的具体方式。

通俗地说,CRUD 是一个说明数据管理操作的一般概念,而 HTTP 方法解释了如何在 Web API 上下文中执行这些操作。

在 .NET 6 中使用 ASP.NET Core 构建 Web API 的七个步骤

在使用 .NET 6 中的 ASP.NET 核心构建 Web API 之前,请确保已安装所有以下必需的工具和技术:

  • Visual Studio 2022:确认您的机器已安装最新版本的 Visual Studio 2022。这个强大的开发环境支持 .NET 6 开发,提供无缝高效的编码体验。
  • .NET SDK 6.0:安装 .NET SDK 6.0 或更高版本;它保留了构建强大的 Web API 所需的工具和库。
  • SQL Server:确保您可以访问 SQL Server 数据库,因为它将成为 Web API 数据的存储和管理中心。设置 SQL Server 数据库对于成功处理和检索应用程序中的数据至关重要。

步骤 1:启动新项目

按照以下步骤创建一个新项目:

  • 单击任务栏上的“搜索”按钮。
  • 键入Visual Studio并按Enter
  • 将出现Visual Studio窗口。
  • 单击“创建新项目”
  • 选择ASP.NET Core Web API作为项目类型。
  • 单击“下一步”
  • 项目名称字段中,输入项目的名称(CRUD_Project)。
  • 位置字段中,输入保存项目的位置。
  • 单击“下一步”
  • 框架列表中,选择.Net 6.0 (长期支持)
  • 身份验证类型列表中,选择.Net 6.0 (长期支持)
  • 在Docker OS部分下,验证使用控制器(取消选中以使用最少 API)启用 OpenAPI 支持选项前面的复选框是否被选中。
  • 单击“创建”

第 2 步:安装 Microsoft.EntityFrameworkCore.Tools 和 Microsoft.EntityFrameworkCore.SqlServer – (NuGet 包)

按照以下步骤安装.Tools包:

  • Visual Studio窗口中,右键单击“Dependencies”
  • 选择管理 NuGet 包
  • 选择“浏览”选项卡。
  • 键入Microsoft.EntityFrameworkCore.Tools并按Enter
  • 安装最新版本。
  • 现在,以相同的方式添加(安装).SqlServer包。

步骤 3:在 SQL 中创建新数据库

按照以下步骤在 SQL 中创建一个新的数据库:

  • 创建一个名为CRUD_DB的新 SQL 数据库(如果需要,您可以选择其他名称)。
  • 执行脚本在 CRUD_DB 数据库中创建产品表。

步骤 4:创建数据库上下文和模型

按照下面提到的步骤,在 ASP.NET Core Web API 项目中使用数据库优先方法在 SQL 中构建一个新数据库:

  • 单击任务栏上的“搜索”按钮。
  • 键入Visual Studio并按Enter
  • 将出现Visual Studio窗口。
  • 工具列表中,选择NuGet 包管理器,然后单击包管理器控制台
  • 将出现“包管理器控制台”窗口。
  • 键入“ Scaffold-DbContext “Server=SERVERNAME;Database=CRUD_DB;Integrated Security=True” Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models ”。 (将 CRUD_DB 替换为您的数据库服务器名称)
  • Enter
附加信息:

执行该命令后,将在项目解决方案中创建 Model 文件夹,其中包含两个基本文件:ProductDBContext.cs 和 Product.cs。ProductDBContext.cs 文件处理数据库交互,而 Product.cs 则用作表示数据库中“Products”表结构的模型。

为了保持代码库的简洁高效,建议从 ProductDBContext.cs 中删除 OnConfiguring() 方法,因为它包含数据库连接字符串,为了更好地组织,应该以不同的方式管理它。相反,连接字符串将添加到 appsettings.json 文件中。此外,将删除同一文件中的 ProductDBContext() 构造函数,以增强代码的简单性和性能。这些调整有助于组织良好的项目,遵循.NET Core开发的最佳实践。

步骤 5:设置数据库连接

按照以下步骤设置 DB 连接:

  • 打开appsettings.json文件。
  • 插入所需的数据库连接字符串
  • 将servername替换为您的数据库服务器的名称。
  • 使用Program.cs文件中的连接字符串配置数据库连接。
更新 Program.cs

为了适应 .NET 6 中引入的更改,现在在 Program.cs 文件中进行了配置调整,因为 Startup.cs 不再用于配置。在 Program.cs 中包含以下几行:

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

不要忘记在 Program.cs 文件的顶部包含必要的“using”语句以启用所需的功能。 

USING Microsoft.EntityFrameworkCore;
USING ProductAPI.Models; 

步骤 6:插入产品控制器

按照以下步骤插入产品控制器:

  • 解决方案资源管理器中,右键单击“控制器”文件夹。
  • 选择添加,然后单击控制器
  • 将出现“添加控制器”对话框。
  • 控制器名称字段中输入名称。(CRUD_CONTROLLER)
  • 模板列表中,选择空 API 控制器
  • 单击“添加”

步骤 7:在 ProductsController.cs 中添加方法

在 ProductsController.cs 文件中,我们将整合必要的端点以完成四个主要的 CRUD 操作:GET、POST、PUT 和 DELETE。这些端点支持与 API 进行通信并有效地处理数据。您可以在 ProductsController.cs 文件中使用提供的代码片段来实现这些功能。通过这样做,您将能够在“Products”表上执行“n”个 CRUD 操作,并确保在您的 Web API 中无缝处理数据。

using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using ProductCRUDAPI.Models;

namespace ProductCRUDAPI.Controllers
{
    [Route("api/[controller]")]
    [ApiController]
    public class ProductsController : ControllerBase
    {
        private readonly ProductDBContext _context;

        public ProductsController(ProductDBContext context)
        {
            _context = context;
        }

        [HttpGet]
        public async Task<IEnumerable<Product>> Get()
        {
            return await _context.Products.ToListAsync();
        }

        [HttpGet("{id}")]
        public async Task<IActionResult> Get(int id)
        {
            if (id < 1)
                return BadRequest();
            var product = await _context.Products.FirstOrDefaultAsync(m => m.Id == id);
            if (product == null)
                return NotFound();
            return Ok(product);

        }

        [HttpPost]
        public async Task<IActionResult> Post(Product product)
        {
            _context.Add(product);
            await _context.SaveChangesAsync();
            return Ok();
        }

        [HttpPut]
        public async Task<IActionResult> Put(Product productData)
        {
            if (productData == null || productData.Id == 0)
                return BadRequest();

            var product = await _context.Products.FindAsync(productData.Id);
            if (product == null)
                return NotFound();
            product.Name = productData.Name;
            product.Description = productData.Description;
            product.Price = productData.Price;
            await _context.SaveChangesAsync();
            return Ok();
        }

        [HttpDelete("{id}")]
        public async Task<IActionResult> Delete(int id)
        {
            if (id < 1)
                return BadRequest();
            var product = await _context.Products.FindAsync(id);
            if (product == null) 
                return NotFound();
            _context.Products.Remove(product);
            await _context.SaveChangesAsync();
            return Ok();

        }
    }
}

步骤 8:启动 Web API

按照以下步骤启动 Web API:

  • Visual Studio中按F5启动Web API
  • 在Chrome中打开一个新标签页。
  • 在 URL 栏中,输入“ https://localhost:{port}/swagger/index.html。 ”(将“{ port }”替换为 API 正在运行的实际端口号)。
  • 测试您的CRUD Web API的功能。

结论

我希望一切都清楚,并且您可以轻松地使用 .NET 6.0 创建 CRUD Web API。如果你喜欢此文章请点赞、收藏,如果不喜欢你可以评论、建议。祝你有美好的一天。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/912191.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

YOLOPv2论文翻译

YOLOPv2: Better, Faster, Stronger for Panoptic Driving Perception 摘要 在过去的十年中&#xff0c;多任务学习方法在解决全景驾驶感知问题方面取得了令人鼓舞的成果&#xff0c;既提供了高精度又具备高效能的性能。在设计用于实时实际自动驾驶系统的网络时&#xff0c;这…

使用GitHub Actions实现CI/CD流程

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 使用GitHub Actions实现CI/CD流程 GitHub Actions 简介 创建仓库 配置工作流 示例工作流文件 触发和运行工作流 部署应用 最佳实…

【C++练习】使用海伦公式计算三角形面积

编写并调试一个计算三角形面积的程序 要求&#xff1a; 使用海伦公式&#xff08;Herons Formula&#xff09;来计算三角形的面积。程序需要从用户那里输入三角形的三边长&#xff08;实数类型&#xff09;。输出计算得到的三角形面积&#xff0c;结果保留默认精度。提示用户…

【服务器】使用命令行文本编辑器(如 vim、nano 或 vi)创建文件并编辑

【服务器】使用命令行文本编辑器&#xff08;如 vim、nano 或 vi&#xff09;创建文件并编辑 准备&#xff1a;连接至服务器&#xff08;如ssh&#xff09;创建 .ncl 文件方法 1: 使用 vim 创建 .ncl 文件方法 2: 使用 nano 创建 .ncl 文件确认文件已创建运行 .ncl 文件 总结参…

负载均衡式在线oj项目开发文档(个人项目)

项目目标 需要使用的技术栈&#xff1a; 这个项目共分成三个模块第一个模块为公共的模块&#xff0c;用于解决字符串处理&#xff0c;文件操作&#xff0c;网络连接等等的问题。 第二个模块是一个编译运行的模块&#xff0c;这个模块的主要功能就是将用户的代码收集上来之后要…

区块链技术在数字版权管理中的应用

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 区块链技术在数字版权管理中的应用 区块链技术在数字版权管理中的应用 区块链技术在数字版权管理中的应用 引言 区块链技术概述 …

数据编排与ETL有什么关系?

数据编排作为近期比较有热度的一个话题&#xff0c;讨论度比较高&#xff0c;同时数据编排的出现也暗示着数字化进程的自动化发展。在谈及数据编排时&#xff0c;通常也会谈到ETL&#xff0c;这两个东西有相似点也有不同点。 数据编排和ETL&#xff08;提取、转换、加载&#x…

test 是 JavaScript 中正则表达式对象 (RegExp) 的一种方法,用于测试一个字符串是否匹配某个正则表达式

在你的代码中&#xff0c;test 方法用于验证扫描结果是否符合特定的格式要求。具体来说&#xff0c;/^[A-Za-z\d]{16}$/.test(res.result) 这一行代码用于检查扫描结果 res.result 是否是一个由16个字母或数字组成的字符串。 test 方法的作用 正则表达式匹配&#xff1a; ^ 表…

鸿蒙开发:ArkTS如何读取图片资源

ArkTS在TS的基础上主要扩展了声明式UI能力&#xff0c;简化了构建和更新UI的过程。开发者可以以声明式的方式来描述UI的结构&#xff0c;如使用build方法中的代码块。同时&#xff0c;ArkTS提供了自定义组件、系统组件、属性方法、事件方法等&#xff0c;以构建应用UI界面。今天…

外贸管理利器7选,助力高效办公

推荐7款外贸管理软件&#xff0c;包括ZohoBooks、ZohoCRM、富通天下等&#xff0c;各具特色&#xff0c;满足外贸企业不同需求&#xff0c;提高管理效率&#xff0c;助力企业全球化竞争。、 一、Zoho Books Zoho Books是一款外贸财务管理软件&#xff0c;不仅为用户提供了一个…

Powerfx日期的設定

踏入2024年年尾 &#xff0c;即將開始2025年 &#xff0c; 很多事又到了一個新的開始&#xff0c;我們的Microsoft windows 也一樣&#xff0c;就是要對Windows 10說再見&#xff0c;踏入Windows 11&#xff0c;對大多數用戶來說Windows 11既很接近又很遙遠&#xff1b;這是因為…

单应用系统规划Node(节点)、Menu(菜单) 和 User(用户)之间关系

标题中的内容涉及到了系统设计中的权限管理和功能模块化。 通过设计一个 Node 系统 来实现更灵活、更安全的权限控制。Node 更像是一个概念&#xff0c;但在实际应用中&#xff0c;它可以具象化为数据库中的表结构&#xff0c;进而与 Menu 和 User 权限系统关联起来。 Node 系统…

Node.js——fs模块-文件重命名和移动

1、在Node.js中&#xff0c;我们可以使用 rename 或 renameSync 来移动或重命名文件或文件夹 2、语法&#xff1a; fs.rename(oldPath,newPath,callback) fs.renameSync(oldPath,newPath) 参数说明&#xff1a; oldPath 文件当前的路径 newPath 文件新的路径 callback 操…

MySQL性能测试方案设计

在现代互联网系统中&#xff0c;数据库性能直接影响到整体应用的速度和用户体验。而MySQL作为广泛使用的关系型数据库&#xff0c;随着数据量和并发请求的增长&#xff0c;其性能问题也日益突出。今天我们将深入探讨如何设计一套高效的MySQL性能测试方案&#xff0c;帮助你精准…

[Linux]:高级IO

1. IO 理解 1.1 IO 的基本概念 I/O即输入/输出&#xff08;input/output&#xff09;&#xff0c;是计算机系统中极为关键的操作环节。 在经典的冯诺依曼体系结构框架下&#xff0c;其核心在于数据的传输流向界定了输入与输出的概念。具体而言&#xff0c;当把数据从诸如键盘…

数据结构之二叉树--前序,中序,后序详解(含源码)

二叉树 二叉树不能轻易用断言&#xff0c;因为树一定有空 二叉树链式结构的实现 在学习二叉树的基本操作前&#xff0c;需先要创建一棵二叉树&#xff0c;然后才能学习其相关的基本操作。 typedef int BTDataType; typedef struct BinaryTreeNode {BTDataType _data;struct B…

Java-I/O框架13:文件夹的递归遍历和递归删除

视频链接&#xff1a;16.29 递归遍历和递归删除_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1Tz4y1X7H7?spm_id_from333.788.videopod.episodes&vd_sourceb5775c3a4ea16a5306db9c7c1c1486b5&p29 1.文件夹的递归遍历 public class ListDirectoryDemo01 {pub…

Qt 无法获取调试输出

问题 使用Qt进行编程时&#xff0c;发现在应用程序输出窗口无法输出调试信息&#xff0c;在源代码里的debug输出信息一个也不显示。 如下图&#xff1a; 解决方案 同一个IDE开启多次&#xff0c;会导致出现这样的问题&#xff0c;可以把QtCreator关闭只留一个。

影响神经网络速度的因素- FLOPs、MAC、并行度以及计算平台

影响神经网络速度的四个主要因素分别是 FLOPs&#xff08;浮点操作数&#xff09;、MAC&#xff08;内存访问成本&#xff09;、并行度以及计算平台。这些因素共同作用&#xff0c;直接影响到神经网络的计算速度和资源需求。 1. FLOPs&#xff08;Floating Point Operations&a…

02_ElementUI

一.前端工程化 1.1 概述 前端工程化是使用软件工程的方法来单独解决前端的开发流程 中模块化、组件化、规范化、自动化的问题,其主要目的为了 提高效率和降低成本。 1.2 NodeJS的安装 Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行时环 境&#xff0c;可以使 JavaS…