我如何使用.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 来安装这个包。
本站声明:
1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/tech/pnotes/295004.html