乐趣区

关于asp.net-core:手把手教你AspNetCore-WebApi增删改查

前言

小明曾经创立与运行了 WebApi 我的项目,理解我的项目构造有哪些组成,并学会了怎么公布到 IIS。根底曾经建好,从当初开始要真正实现待办事项的性能了。

新建表

CREATE TABLE [dbo].[Todo]([Id] [uniqueidentifier] NOT NULL,
    [Name] [nvarchar](100) NULL,
 CONSTRAINT [PK_Todo] PRIMARY KEY CLUSTERED 
([Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO

增加模型类

  • 在“解决方案资源管理器”中,右键单击我的项目。抉择“增加”>“新建文件夹”。将文件夹命名为 Models。
  • 右键单击 Models 文件夹,而后抉择“增加”>“类”。将类命名为 Todo,而后抉择“增加”。
using System;
namespace App001.Models
{
    public class Todo
    {public Guid Id { get; set;}
        public string Name {get; set;}
    }
}

增加数据库上下文

  • 右键单击 Models 文件夹,而后抉择“增加”>“类”。将类命名为 TodoContext,而后单击“增加”。
using Microsoft.EntityFrameworkCore;
namespace App001.Models
{
    public class TodoContext : DbContext
    {public TodoContext(DbContextOptions<TodoContext> options)
            : base(options)
        { }
        public DbSet<Todo> Todos {get; set;}
    }
}

注册数据库上下文

在 ASP.NET Core 中,服务(如数据库上下文)必须向依赖关系注入 (DI) 容器进行注册。该容器向控制器提供服务。

在 Startup.cs 文件中减少 services.AddDbContext,代码如下:

public void ConfigureServices(IServiceCollection services)
{services.AddDbContext<TodoContext>(opt =>opt.UseSqlServer(Configuration.GetConnectionString("TodoContext")));
    services.AddControllers();}

在 appsettings.json 文件中减少 ConnectionStrings,代码如下:

"ConnectionStrings": {"TodoContext": "server=.\\SQLEXPRESS;database=App001;uid=sa;pwd=123456;Pooling='true';Min Pool Size=3;"},

构建控制器,实现增删改查

  • 右键单击 Controllers 文件夹。
  • 抉择“增加”>“新建构建项”。
  • 抉择“其操作应用实体框架的 API 控制器”,而后抉择“增加”。
  • 在“增加其操作应用实体框架的 API 控制器”对话框中:
  • 在“模型类”中抉择“Todo (App001.Models)”。
  • 在“数据上下文类”中抉择“TodoContext (App001.Models)”。
  • 抉择“增加”。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using App001.Models;
namespace App001.Controllers
{[Route("api/[controller]")]
    [ApiController]
    public class TodosController : ControllerBase
    {
        private readonly TodoContext context;
        public TodosController(TodoContext context)
        {this.context = context;}
        /// <summary>
        /// 获取所有待办事项
        /// </summary>
        /// <returns></returns>
        [HttpGet]
        public async Task<ActionResult<IEnumerable<Todo>>> GetTodos()
        {return await context.Todo.ToListAsync();
        }
        /// <summary>
        /// 按 ID 获取项
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        [HttpGet("{id}")]
        public async Task<ActionResult<Todo>> GetTodo(Guid id)
        {var todo = await context.Todo.FindAsync(id);
            if (todo == null)
            {return NotFound();
            }
            return todo;
        }
        /// <summary>
        /// 增加新项
        /// </summary>
        /// <param name="todo"></param>
        /// <returns></returns>
        [HttpPost]
        public async Task<ActionResult<Todo>> PostTodo(Todo todo)
        {todo.Id = Guid.NewGuid();
            context.Todo.Add(todo);
            await context.SaveChangesAsync();
            return CreatedAtAction("GetTodo", new { id = todo.Id}, todo);
        }
        /// <summary>
        /// 更新现有项
        /// </summary>
        /// <param name="id"></param>
        /// <param name="todo"></param>
        /// <returns></returns>
        [HttpPut("{id}")]
        public async Task<ActionResult<Todo>> PutTodo(Guid id, Todo todo)
        {var oldTodo = await context.Todo.FindAsync(id);
            oldTodo.Name = todo.Name;
            context.Entry(oldTodo).State = EntityState.Modified;
            await context.SaveChangesAsync();
            return oldTodo;
        }
        /// <summary>
        /// 删除项
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        [HttpDelete("{id}")]
        public async Task<ActionResult<Todo>> DeleteTodo(Guid id)
        {var todo = await context.Todo.FindAsync(id);
            if (todo == null)
            {return NotFound();
            }
            context.Todo.Remove(todo);
            await context.SaveChangesAsync();
            return todo;
        }
    }
}

通过 Postman 测试 增加新项

  • 创立新申请。
  • 将 HTTP 办法设置为“POST”。
  • 将申请 URI 设置为 https://localhost:44342/api/todos。
  • 抉择“注释”选项卡。
  • 抉择“原始”单选按钮。
  • 将类型设置为 JSON (application/json)
  • 在申请注释中,输出待办事项的 JSON:
{"Name":"遛狗"}
  • 抉择 Send。

小结

目前为止,小明曾经实现“待办事项”的增删改查,心里怏怏不乐,摸了摸润滑的脑袋,小明美滋滋找小红去对接了。

退出移动版