DevToDo 列表 — 我如何使用 .Net Core 创建和发布 API
作者:互联网
我如何使用.Net 7从零开始构建一个完整的 API ,前端使用Blazor使用它并发布到Azure 云!
这里的想法是做一个非常简单的待办事项列表项目,专注于开发人员的日常例行研究,也可以对这些待办事项做出反应。希望你喜欢它!
构建 API
首先,我首先构建项目的基础,即包含我用来处理信息的动词的 API。我使用 Visual Studio Code 对其进行编码,我会认为您具有编程的基本知识,并且具备使用 C# 和 ASP.Net 进行编码的所有先决条件和库。
我使用此 CLI 命令创建 API 项目的模板:
dotnet new webapi -o DevToDoList.API新的webapi -o DevToDoList.API
之后,我访问创建的 preject 目录,并在 Controllers 目录中创建DevTodosController.cs
该文件将负责发出请求,并在我们的 api 中配置路由到数据库。请注意,我继承了ControllerBase 类,非常用于在 MVC 结构中构建 API。类之上的注解ApiController也有一些约定并简化了一些事情,比如定义参数。
使用DevToDoList.API.Entities; 使用DevToDoList.API.Models; 使用DevToDoList.API.Persistence; 使用Microsoft.AspNetCore.Mvc; 使用Microsoft.EntityFrameworkCore; 使用模型; namespace DevToDoList.API.Controllers { [ ApiController ] [ Route( "api/dev-todo" ) ] public class DevTodosController : ControllerBase { private readonly DevTodoDbContext _context; 公共 DevTodosController (DevTodoDbContext 上下文) { _context = context; } [ HttpGet ] public IActionResult GetAll () { var devTodos = _context.DevTodos.ToList(); 返回确定(devTodos); } // api/dev-todo/1 HTTP GET [ HttpGet( "{id}" ) ] public IActionResult GetById ( int id ) { var devTodo = _context.DevTodos .Include(s => s.Reactions) .SingleOrDefault(s => s.Id == id); 如果(devTodo == null) 返回NotFound(); 返回确定(devTodo); } [ HttpPost ] public IActionResult Post ( DevTodoInputModel model ) { var devTodo = new DevTodo(model.Title, model.Description, model.Done); _context.DevTodos.Add(devTodo); _context.SaveChanges(); return CreatedAtAction( "GetById" , new { id = devTodo.Id }, 模型); } // api/dev-todo/1/reactions HTTP POST [ HttpPost( "{id}/reactions" ) ] public IActionResult PostReaction ( int id, ReactionDevTodoInputModel model ) { var devTodo = _context.DevTodos.SingleOrDefault(s => s.编号 == 编号); 如果(devTodo == null) 返回BadRequest(); devTodo.AddReaction(model.IsPositive); _context.SaveChanges(); 返回无内容(); } } }
这里我们有一个 HttpGet 方法,它将返回数据库中的所有待办事项(如果有的话)。将只返回一个注册ID的HttpGet。一个 HttpPost 将在数据库中添加一个待办事项,另一个 HttpPost 将发布对任何一个待办事项的反应。7
_context readonly 私有变量负责使 api 方法和数据库之间的连接成为可能。我们稍后再讨论。
我们在模型目录中有这些模型:
DevTodoInputModel.cs
命名空间 模型 { public class DevTodoInputModel { public string Title { get ; 设置;} 公共 字符串描述 {得到; 设置;} public bool Done {得到; 设置;} } }
ReactionDevTodoInputModel.cs
namespace DevToDoList.API.Models { public class ReactionDevTodoInputModel { public int DevTodoId { get ; 设置;} public bool IsPositive {得到; 设置;} } }
现在实体只有将暴露给外部的数据。这是一个促进系统间通信的安全概念。使用它是一种很好的做法,因为它不会泄露任何敏感信息。
开发者文档
namespace DevToDoList.API.Entities { public class DevTodo { public DevTodo ( string title, string description, bool isDone ) { Title = title; 描述=描述; 已完成 = 已完成; Reactions = new List<DevTodoReaction>(); CreatedAt = DateTime.Now; } public int Id {得到; 私有 集;} 公共 字符串标题 {得到; 私有 集;} 公共 字符串描述 {得到; 私有 集;} public bool IsDone {得到; 私有 集;} public DateTime CreatedAt {得到; 私有 集;} public List<DevTodoReaction> Reactions { get ; 私有 集;} public void AddReaction ( bool isPositive ) { Reactions.Add( newDevTodoReaction(isPositive)); } } }
ReactionDevTodoInputModel.cs
namespace DevToDoList.API.Models { public class ReactionDevTodoInputModel { public int DevTodoId { get ; 设置;} public bool IsPositive {得到; 设置;} } }
设置数据库
我使用Entity Framework Core来实现应用程序数据的数据库持久化。如果您是 Entity Framework 的新手,我推荐 Microsoft 文档来帮助您开始使用它。
我使用 dotnet CLI,所以首先,我运行此命令以确保它在我使用它时能够识别它:
dotnet 工具安装 --global dotnet-ef全局点网
我还安装了这个 NuGet 包:
- Microsoft.EntityFrameworkCore.InMemory
- Microsoft.EntityFrameworkCore.SQLServer
- Microsoft.EntityFrameworkCore.设计
如果你在 VSCode 中将需要安装 NuGet Package Manager 来安装这个包。