翻译自 Mohamad Lawand 2021年1月19日的文章 《Asp.Net Core 5 Rest API Step by Step》 [1]

在本文中,我们将创建一个简单的 Asp.Net Core REST API Todo 应用程序,在其中我们可以添加、编辑、删除和查看待办事项,并且将使用 SQLite 来存储数据。

你也可以在 YouTube 上观看完整的视频[2],还可以下载源代码[3]

这是 API 开发系列的第一部分,后面还有:

在开始之前,我们需要准备的四样东西:

下载并安装了所有必需的工具后,我们需要确保 dotnet SDK 已成功安装,我们需要打开终端并通过检查 dotnet 版本来检查 dotnet SDK 是否已成功安装。

打开终端并输入以下命令:

dotnet --version

现在,我们需要安装 EntityFramework 工具:

dotnet tool install --global dotnet-ef

完成后,我们需要创建我们的应用程序:

dotnet new webapi -n "TodoApp" -lang "C#" -au none

现在让我们添加需要使用的依赖包,以便可以使用 EntityFramrwork 和 SQLite:

dotnet add package Microsoft.EntityFrameworkCore.Sqlite
dotnet add package Microsoft.EntityFrameworkCore.Tools

现在,请打开 VS Code 并检查我们的应用程序和源代码,然后,让我们构建应用程序并查看其是否可以运行:

dotnet build
dotnet run

确认可以正常运行后,我们删除由 .Net Core 框架为我们生成的默认模板代码,即删除 WeatherForcastController 和WeatherForcast 类。

接着,我们创建自己的控制器,将其命名为 TodoController

然后,我们创建第一个简单的 Action,将其命名为 TestRun,让我们开始为我们的控制器编码:

[Route("api/[controller]")] // 我们定义控制器要使用的路由
[ApiController] // 我们需要指定控制器的类型以让 .Net Core 知道
public class TodoController : ControllerBase
{
[Route("TestRun")] // 定义此 Action 的路由
[HttpGet]
public ActionResult TestRun()
{
return Ok("success");
}
}

创建完成后,我们需要对其进行测试,为了测试,我们需要执行以下操作:

dotnet build
dotnet run

应用程序运行起来后,我们可以打开 Postman 试一下看看我们得到的响应。

我们在 Postman 中创建一个新请求,并将类型设置为 GET,然后请求以下 URL:

https://localhost:5001/api/todo/testrun

正如您在 TestRun 中看到的那样,我们在 Postman 中得到了 “success” 响应。

测试完之后,我们现在需要开始添加模型,在根目录中添加一个 Models 文件夹,并在其中添加一个名为 ItemData 的类。这是一个非常简单的模型,它表示我们的待办事项的列表项。

public class ItemData
{
public int Id { get; set; }
public string Title { get; set; }
public string Description { get; set; }
public bool Done { get; set; }
}

添加好模型后,我们需要构建 ApiDbContext。在根目录中创建一个 Data 文件夹,然后在该文件夹中创建一个名为 ApiDbContext 的新类。

public class ApiDbContext : DbContext
{
public virtual DbSet<ItemData> Items {get;set;} public ApiDbContext(DbContextOptions<ApiDbContext> options)
: base(options)
{ }
}

然后,我们需要在 appsetting.json 中指定应用程序的连接字符串:

"ConnectionStrings": {
"DefaultConnection" : "DataSource=app.db; Cache=Shared"
}

完善 DbContext 和连接字符串后,我们需要更新 Startup 类,以便可以在应用程序中使用 Application DbContext。在我们的根目录中打开 Startup 类,然后添加以下代码:

services.AddDbContext<ApiDbContext>(options =>
options.UseSqlite(
Configuration.GetConnectionString("DefaultConnection")
));

添加好 DbContext 中间件后,我们需要添加初始化迁移来创建数据库:

dotnet ef migrations add "Initial Migrations"
dotnet ef database update

成功完成数据库更新后,我们可以看到有一个名为 Migrations 的新文件夹,它将包含 C# 脚本,该脚本将负责创建数据库及其表 Items。我们可以在根目录中看到 app.db 文件,也可以使用 SQLite 查看工具来验证表是否已成功创建,由此我们可以验证数据库是否已创建。

现在,我们已经完成了控制器的所有基础设施的搭建。现在,我们需要开始构建 TodoController 并将其连接到ApiDbContext

我们从添加获取待办事项中的所有项的方法 GetItems 开始,依次添加所有需要的方法:

using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using TodoApp.Data;
using TodoApp.Models; namespace TodoApp.Controllers
{
[Route("api/[controller]")] // api/todo
[ApiController]
public class TodoController : ControllerBase
{
private readonly ApiDbContext _context; public TodoController(ApiDbContext context)
{
_context = context;
} [HttpGet]
public async Task<IActionResult> GetItems()
{
var items = await _context.Items.ToListAsync();
return Ok(items);
} [HttpPost]
public async Task<IActionResult> CreateItem(ItemData data)
{
if (ModelState.IsValid)
{
await _context.Items.AddAsync(data);
await _context.SaveChangesAsync(); return CreatedAtAction("GetItem", new { data.Id }, data);
} return new JsonResult("Something went wrong") { StatusCode = 500 };
} [HttpGet("{id}")]
public async Task<IActionResult> GetItem(int id)
{
var item = await _context.Items.FirstOrDefaultAsync(x => x.Id == id); if (item == null)
return NotFound(); return Ok(item);
} [HttpPut("{id}")]
public async Task<IActionResult> UpdateItem(int id, ItemData item)
{
if (id != item.Id)
return BadRequest(); var existItem = await _context.Items.FirstOrDefaultAsync(x => x.Id == id); if (existItem == null)
return NotFound(); existItem.Title = item.Title;
existItem.Description = item.Description;
existItem.Done = item.Done; // 在数据库级别实施更改
await _context.SaveChangesAsync(); return NoContent();
} [HttpDelete("{id}")]
public async Task<IActionResult> DeleteItem(int id)
{
var existItem = await _context.Items.FirstOrDefaultAsync(x => x.Id == id); if (existItem == null)
return NotFound(); _context.Items.Remove(existItem);
await _context.SaveChangesAsync(); return Ok(existItem);
}
}
}

然后,我们可以在 Postman 中一个一个地对它们进行测试。

最后,由于我们在创建 Web API 项目时使用的是 .Net 5,因此 Swagger 已经集成到了我们的应用程序中,要查看 Swagger 界面,可以在浏览器中导航到 http://localhost:5000/swagger/index.html

Swagger 允许您描述 API 的结构,以便程序可以自动读取它们,而无需我们额外的工作。Swagger 能够读取 API 结构并为我们生成一个 UI,我们可以借此来改善开发体验。

感谢您阅读本文。

本文是 API 开发系列的第一部分,后面会有第二、第三部分。

作者 : Mohamad Lawand

译者 : 技术译民

出品 : 技术译站

链接 : 英文原文


  1. https://dev.to/moe23/asp-net-core-5-rest-api-step-by-step-2mb6 Asp.Net Core 5 Rest API Step by Step

  2. https://youtu.be/p_wUdWshYc8

  3. https://github.com/mohamadlawand087/v6-RestApiNetCore5

  4. https://mp.weixin.qq.com/s/zR0Yz0eUYXzSrctYmE2oWg Asp.Net Core 5 REST API 使用 JWT 身份验证 - Step by Step

Asp.Net Core 5 REST API - Step by Step的更多相关文章

  1. Asp.Net Core 5 REST API 使用 JWT 身份验证 - Step by Step

    翻译自 Mohamad Lawand 2021年1月22日的文章 <Asp Net Core 5 Rest API Authentication with JWT Step by Step> ...

  2. Asp Net Core 5 REST API 使用 RefreshToken 刷新 JWT - Step by Step

    翻译自 Mohamad Lawand 2021年1月25日的文章 <Refresh JWT with Refresh Tokens in Asp Net Core 5 Rest API Step ...

  3. angular4和asp.net core 2 web api

    angular4和asp.net core 2 web api 这是一篇学习笔记. angular 5 正式版都快出了, 不过主要是性能升级. 我认为angular 4还是很适合企业的, 就像.net ...

  4. ASP.NET Core 中基于 API Key 对私有 Web API 进行保护

    这两天遇到一个应用场景,需要对内网调用的部分 web api 进行安全保护,只允许请求头账户包含指定 key 的客户端进行调用.在网上找到一篇英文博文 ASP.NET Core - Protect y ...

  5. ASP.NET Core WebApi构建API接口服务实战演练

    一.ASP.NET Core WebApi课程介绍 人生苦短,我用.NET Core!提到Api接口,一般会想到以前用到的WebService和WCF服务,这三个技术都是用来创建服务接口,只不过Web ...

  6. 使用ASP.NET Core构建RESTful API的技术指南

    译者荐语:利用周末的时间,本人拜读了长沙.NET技术社区翻译的技术标准<微软RESTFul API指南>,打算按照步骤写一个完整的教程,后来无意中看到了这篇文章,与我要写的主题有不少相似之 ...

  7. 温故知新,使用ASP.NET Core创建Web API,永远第一次

    ASP.NET Core简介 ASP.NET Core是一个跨平台的高性能开源框架,用于生成启用云且连接Internet的新式应用. 使用ASP.NET Core,您可以: 生成Web应用和服务.物联 ...

  8. 使用angular4和asp.net core 2 web api做个练习项目(一)

    这是一篇学习笔记. angular 5 正式版都快出了, 不过主要是性能升级. 我认为angular 4还是很适合企业的, 就像.net一样. 我用的是windows 10 安装工具: git for ...

  9. 使用angular4和asp.net core 2 web api做个练习项目(四)

    第一部分: http://www.cnblogs.com/cgzl/p/7755801.html 第二部分: http://www.cnblogs.com/cgzl/p/7763397.html 第三 ...

随机推荐

  1. map & scale bug

    map & scale TW bug https://antv.alipay.com/zh-cn/g2/3.x/demo/map/drill-down.html import React, { ...

  2. express+apollo+mongodb

    阿波罗服务器入门 λ yarn add --dev @babel/core @babel/cli @babel/preset-env λ yarn add --dev nodemon // " ...

  3. Flutter: SearchDelegate 委托showSearch定义搜索页面的内容

    API class _MyHomeState extends State<MyHome> { List<String> _list = List.generate(100, ( ...

  4. NGK.IO的智能合约是炒作还是未来商业的主流?

    随着NGK主网的上线,NGK市场也备受关注.目前,NGK代币价格已经由初始价格0.0215美元涨到现在的0.86美元,代币价格上涨40倍!数字货币市场也已经将重点目光放到了NGK代币上,相信在不久的将 ...

  5. DHCP (Dynamic Host Configuration Protocol )协议的探讨与分析

    DHCP (Dynamic Host Configuration Protocol )协议的探讨与分析 问题背景 最近在工作中遇到了连接外网的交换机在IPv6地址条件下从运营商自动获取的DNS地址与本 ...

  6. 使用stress进行压力测试

    本文转载自使用stress进行压力测试 导语 stress,顾名思义是一款压力测试工具.你可以用它来对系统CPU,内存,以及磁盘IO生成负载. 安装stress 几乎所有主流的linux发行版的软件仓 ...

  7. Mysql的join算法

    本文转载自Mysql的join算法 导语 在Mysql中,使用Nested-Loop Join的算法思想去优化join,Nested-Loop Join翻译成中文则是"嵌套循环连接" ...

  8. java基础第12期——反射、注解

    一. 反射 反射: 将类的各个组成部分封装为其他对象. 1.1 获取class对象的方式 Class.forName("全类名"): 将字节码文件加载进内存,返回class对象 多 ...

  9. SpringBoot 整合 hibernate 连接 Mysql 数据库

    前一篇搭建了一个简易的 SpringBoot Web 项目,最重要的一步连接数据库执行增删改查命令! 经过了一天的摸爬滚打,终于成功返回数据! 因为原来项目使用的 SpringMVC + Hibern ...

  10. idea添加汉化包之后出现的一些问题 解决方案

    先把原链接放在这:https://jingyan.baidu.com/article/fb48e8bef2bcb66e622e14d2.html 关掉idea之后,一定要记住是在压缩软件中打开,而不是 ...