共计 3412 个字符,预计需要花费 9 分钟才能阅读完成。
前言
小明曾经创立与运行了 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。
小结
目前为止,小明曾经实现“待办事项”的增删改查,心里怏怏不乐,摸了摸润滑的脑袋,小明美滋滋找小红去对接了。
正文完
发表至: asp.net-core
2020-10-10