手把手教你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。

小结
目前为止,小明已经实现“待办事项”的增删改查,心里洋洋得意,摸了摸光滑的脑袋,小明美滋滋找小红去对接了。
手把手教你AspNetCore WebApi:增删改查的更多相关文章
- AJAX 调用WebService 、WebApi 增删改查(笔记)
经过大半天努力,终于完成增删改查了!心情有点小激动!!对于初学者的我来说,一路上都是迷茫,坑!!虽说网上有资料,可动手起来却不易(初学者的我).(苦逼啊!) WebService 页面: /// &l ...
- 手把手教你AspNetCore WebApi:Swagger(Api文档)
前言 小明已经实现"待办事项"的增删改查,并美滋滋向负责前端的小红介绍Api接口,小红很忙,暂时没有时间听小明介绍,希望小明能给个Api文档.对于码农小明来说能不写文档就尽量不要写 ...
- ASP.NET WebApi 增删改查
本篇是接着上一篇<ASP.NET WebApi 入门>来介绍的. 前言 习惯说 CRUD操作,它的意思是"创建. 读取. 更新和删除"四个基本的数据库操作.许多 HTT ...
- WebApi增删改查Demo
1.新建webapi项目 2.配置WebApiConfig public const string DEFAULT_ROUTE_NAME = "MyDefaultRoute"; p ...
- 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 ...
- 手把手教你AspNetCore WebApi:入门
需求 前几天,马老板给小明和小红一个"待办事项"网站,小明负责后端,小红负责前端,并要求网站可以同时在 Windows.和 Linux 上运行. 小明整理了一下"待办事项 ...
- 手把手教你AspNetCore WebApi:Serilog(日志)
前言 小明目前已经把"待办事项"功能实现了,API文档也搞定了,但是马老板说过,绝对不能让没有任何监控的项目上线的. Serilog是什么? 在.NET使用日志框架第一时间会想到N ...
- 手把手教你AspNetCore WebApi:认证与授权
前言 这几天小明又有烦恼了,之前给小红的接口没有做认证授权,直接裸奔在线上,被马老板发现后狠狠的骂了一顿,赶紧让小明把授权加上.赶紧Baidu一下,发现大家都在用JWT认证授权,这个倒是挺适合自己的. ...
- 手把手教你AspNetCore WebApi:数据验证
前言 小明最近又遇到麻烦了,小红希望对接接口传送的数据进行验证,既然是小红要求,那小明说什么都得满足呀,这还不简单嘛. 传统验证 [HttpPost] public async Task<Act ...
随机推荐
- WPF Devexpress ChartControl CrosshairLabel显示内容居右
源码可加Q群:580749909. 一.解决的问题 ChartControl中希望CrosshairLabel的内容据右 or 自定义 二.实现. 多个显示实例(实例:条形,线形,点等等)下的内容设置 ...
- Java程序员博客系统推荐!我调研了100来个 Java 开源博客系统,发现这 5 个最好用!
大家好!我是 Guide 哥,Java 后端开发.一个会一点前端,喜欢烹饪的自由少年. 最近想倒腾一下博客,看了很多现成的比较成熟的开源博客系统,自己也简单从下面几个维度总结对比了一下: star数量 ...
- Fitness - 05.08
倒计时237天 运动34分钟,共计8组,3.4公里.拉伸10分钟. 每组跑步2分钟(6.6KM/h),走路2分钟(6KM/h). 最近掉了几斤,所以今天状态感觉特别好. 虽然每天在拼命学习Unity, ...
- html中实现倒计时功能(setInterval,clearInterval)
倒计时主要用到的知识点:1.设置时间间隔的setInterval可以被clearInterval取消 2.毫秒转换为时分格式 这个是效果图 下面是js中的函数 var shijian=3600; va ...
- Agumaster 改善了pagination
页面越来越完善了.
- Java常用工具类整理
字符数组转String package com.sunsheen.hcc.fabric.utils; /** * 字符数组工具 * @author WangSong * */ public class ...
- Spring Boot 集成阿里云 OSS 进行文件存储
最近因为项目中需要存储很多的图片,不想存储到服务器上,因此就直接选用阿里云的对象服务(Object Storage Service,简称 OSS)来进行存储,本文将介绍 Spring Boot 集成 ...
- 没有修改getModel()方法的返回值导致的Hibernate接收不到页面数据
异常1.通过id进行查询,但id为null,就出现这个异常!java.lang.IllegalArgumentException: id to load is required for loading ...
- 分布式事务框架.NetCore CAP总结
来自CAP原作者yang-xiaodong的原理图: 本文撰写者:cmliu,部分内容引用自官方文档,部分内容待更新# .NetCore CAP # 1,简介 CAP 是一个遵循 .NET Stand ...
- hexo博客front-matter格式
通用格式 Front-matter 是文件最上方以 --- 分隔的区域,用于指定个别文件的变量,举例来说: --- title: Hello World date: 2013/7/13 20:46:2 ...