前言

小明已经创建与运行了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。

小结

目前为止,小明已经实现“待办事项”的增删改查,心里洋洋得意,摸了摸光滑的脑袋,小明美滋滋找小红去对接了。

手把手教你AspNetCore WebApi:增删改查的更多相关文章

  1. AJAX 调用WebService 、WebApi 增删改查(笔记)

    经过大半天努力,终于完成增删改查了!心情有点小激动!!对于初学者的我来说,一路上都是迷茫,坑!!虽说网上有资料,可动手起来却不易(初学者的我).(苦逼啊!) WebService 页面: /// &l ...

  2. 手把手教你AspNetCore WebApi:Swagger(Api文档)

    前言 小明已经实现"待办事项"的增删改查,并美滋滋向负责前端的小红介绍Api接口,小红很忙,暂时没有时间听小明介绍,希望小明能给个Api文档.对于码农小明来说能不写文档就尽量不要写 ...

  3. ASP.NET WebApi 增删改查

    本篇是接着上一篇<ASP.NET WebApi 入门>来介绍的. 前言 习惯说 CRUD操作,它的意思是"创建. 读取. 更新和删除"四个基本的数据库操作.许多 HTT ...

  4. WebApi增删改查Demo

    1.新建webapi项目 2.配置WebApiConfig public const string DEFAULT_ROUTE_NAME = "MyDefaultRoute"; p ...

  5. AJAX 调用WebService 、WebApi 增删改查

    WebService 页面: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 3 ...

  6. 手把手教你AspNetCore WebApi:入门

    需求 前几天,马老板给小明和小红一个"待办事项"网站,小明负责后端,小红负责前端,并要求网站可以同时在 Windows.和 Linux 上运行. 小明整理了一下"待办事项 ...

  7. 手把手教你AspNetCore WebApi:Serilog(日志)

    前言 小明目前已经把"待办事项"功能实现了,API文档也搞定了,但是马老板说过,绝对不能让没有任何监控的项目上线的. Serilog是什么? 在.NET使用日志框架第一时间会想到N ...

  8. 手把手教你AspNetCore WebApi:认证与授权

    前言 这几天小明又有烦恼了,之前给小红的接口没有做认证授权,直接裸奔在线上,被马老板发现后狠狠的骂了一顿,赶紧让小明把授权加上.赶紧Baidu一下,发现大家都在用JWT认证授权,这个倒是挺适合自己的. ...

  9. 手把手教你AspNetCore WebApi:数据验证

    前言 小明最近又遇到麻烦了,小红希望对接接口传送的数据进行验证,既然是小红要求,那小明说什么都得满足呀,这还不简单嘛. 传统验证 [HttpPost] public async Task<Act ...

随机推荐

  1. 23种设计模式 - 行为变化(Command - Visitor)

    其他设计模式 23种设计模式(C++) 每一种都有对应理解的相关代码示例 → Git原码 ⌨ 行为变化 Command 动机(Motivation) 在软件构建过程中,"行为请求者" ...

  2. 【Flutter 实战】17篇动画系列文章带你走进自定义动画

    老孟导读:Flutter 动画系列文章分为三部分:基础原理和核心概念.系统动画组件.8篇自定义动画案例,共17篇. 动画核心概念 在开发App的过程中,自定义动画必不可少,Flutter 中想要自定义 ...

  3. Python 批量下载BiliBili视频 打包成软件

    文章目录 很多人学习python,不知道从何学起.很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手.很多已经做案例的人,却不知道如何去学习更加高深的知识.那么针对这三类人,我给大家 ...

  4. python执行gradle脚本

    import os import shutil import subprocess #拷贝文件 def copyFile(srcFile, dstFile): #检查源文件是否存在 if not os ...

  5. javaScript 推荐书籍 由简单到入门,初级到高级。

  6. RPC之总体架构

    要完成一个高可用.高性能的RPC框架,需要对其架构的设计进行梳理,这里参考xxl-rpc框架,对整个项目进行梳理. 以上就是项目的整个构架,分为四个部分: 第一个是服务发布与引入,基于JDK动态代理以 ...

  7. oracle修改管理员密码

    运行到C盘根目录 2.输入:SET ORACLE_SID = 你的SID名称 3.输入:sqlplus/nolog 4.输入:connect/as sysdba 5.输入:altre user ris ...

  8. SpringBoot整合Quartz及log4j实例

    SpringBoot整合Quartz及log4j实例 因为之前项目中经常会做一些定时Job的东西,所以在此记录一下,目前项目中已经使用elastic-job,这个能相对比Quartz更加简单方便一些, ...

  9. 20190925-03Redis端口号的由来及单线程加多路IO复用 000 024

  10. 关于HTML基本标签,了解一下!

    目录 1 前言 2 正文 2.1 HTML文档结构 2.1.1 html标签 2.1.2 head标签 2.1.3 title标签 2.1.4 body标签 2.2 HTML常用标签 2.2.1 换行 ...