编程语言
首页 > 编程语言> > DevToDo 列表 — 我如何使用 .Net Core 创建和发布 API

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 包:

如果你在 VSCode 中将需要安装 NuGet Package Manager 来安装这个包。

标签:Blazor,Azure,核心项目,数据库,数据,icode9,entity
来源: