翻译自 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. Python 2 to Python 3 convert

    Python 2 to Python 3 convert 2to3, 自动将 Python 2 代码转为 Python 3 代码 https://docs.python.org/zh-cn/2/lib ...

  2. what's the print number means after called the setTimeout function in Chrome console?

    what's the print number means after called the setTimeout function in Chrome console? javascript fun ...

  3. taro table component

    taro table component https://juejin.im/post/5d901696f265da5b926bbcaa https://taro-ext.jd.com/search? ...

  4. svg-path-to-polygons & svg-path-parser

    svg-path-to-polygons & svg-path-parser svg-path-to-polygons https://www.npmjs.com/package/svg-pa ...

  5. c++ string与wstring转换

    wchar_t to char #include <comdef.h> const wchar_t* exepath = L"d:\\中文 路径\\中文 路径.exe" ...

  6. js滚轮事件兼容写法

    /** * 简易的事件添加方法 */ define(function(require, exports, module) { exports.addEvent = (function(window, ...

  7. SHON WEBB:太怀念过去的人,往往走不远

    太怀念过去的人,最后都怎么样?近日,星盟审批官SHON WEBB先生给出了答案,他认为,如果一个人太怀念过去,怀念过去自己所有的荣耀,而轻视现在的任何工作,那他往往走不远. SHON WEBB先生讲到 ...

  8. JUnit5学习之三:Assertions类

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...

  9. DRF的封装:APIView类及五大模块

    目录 一.drf框架的封装特点 1.APIView类 二.drf的基础组件 1.请求模块 1.1 请求模块做了什么 1.2 请求request参数 2.解析模块 3.响应模块 4.渲染模块(了解) 5 ...

  10. 2021-2-28:调用 System.gc() 后究竟发生了什么?

    首先,根据 DisableExplicitGC 这个 JVM 启动参数的状态,确定是否会 GC,如果需要 GC,不同 GC 会有不同的处理. 1. G1 GC 的处理 如果是 System.gc() ...