新建表Todo,如图

添加模型类

  • 在“解决方案资源管理器”中,右键单击项目。 选择“添加” > “新建文件夹”。 将文件夹命名为 Models。

  • 右键单击 Models 文件夹,然后选择“添加” > “类” 。 将类命名为 Todo,然后选择“添加”。

    using System;

    namespace Course001.Models

    {

    public class Todo

    {

    public Guid Id { get; set; }

    public string Name { get; set; }

    }

    }

添加数据库上下文

  • 右键单击 Models 文件夹,然后选择“添加” > “类” 。 将类命名为 TodoContext,然后单击“添加”。

    using Microsoft.EntityFrameworkCore;

    namespace Course001.Models

    {

    public class TodoContext : DbContext

    {

    public TodoContext(DbContextOptions options)

    : base(options)

    {

    }

    public DbSet Todos { get; set; }

    }

    }

注册数据库上下文

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

在Startup.cs文件中增加services.AddDbContext,代码如下:

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

在appsettings.json文件中增加ConnectionStrings,代码如下:

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

修改TodosController.cs文件实现增删改查

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Threading.Tasks;
  5. using Microsoft.AspNetCore.Http;
  6. using Microsoft.AspNetCore.Mvc;
  7. using Microsoft.EntityFrameworkCore;
  8. using Course001.Models;
  9. namespace Course001.Controllers
  10. {
  11. [Route("api/[controller]")]
  12. [ApiController]
  13. public class TodosController : ControllerBase
  14. {
  15. private readonly TodoContext context;
  16. public TodosController(TodoContext context)
  17. {
  18. this.context = context;
  19. }
  20. /// <summary>
  21. /// 获取所有待办事项
  22. /// </summary>
  23. /// <returns></returns>
  24. [HttpGet]
  25. public async Task<ActionResult<IEnumerable<Todo>>> GetTodos()
  26. {
  27. return await context.Todo.ToListAsync();
  28. }
  29. /// <summary>
  30. /// 按ID获取项
  31. /// </summary>
  32. /// <param name="id"></param>
  33. /// <returns></returns>
  34. [HttpGet("{id}")]
  35. public async Task<ActionResult<Todo>> GetTodo(Guid id)
  36. {
  37. var todo = await context.Todo.FindAsync(id);
  38. if (todo == null)
  39. {
  40. return NotFound();
  41. }
  42. return todo;
  43. }
  44. /// <summary>
  45. /// 添加新项
  46. /// </summary>
  47. /// <param name="todo"></param>
  48. /// <returns></returns>
  49. [HttpPost]
  50. public async Task<ActionResult<Todo>> PostTodo(Todo todo)
  51. {
  52. todo.Id = Guid.NewGuid();
  53. context.Todo.Add(todo);
  54. await context.SaveChangesAsync();
  55. return CreatedAtAction("GetTodo", new { id = todo.Id }, todo);
  56. }
  57. /// <summary>
  58. /// 更新现有项
  59. /// </summary>
  60. /// <param name="id"></param>
  61. /// <param name="todo"></param>
  62. /// <returns></returns>
  63. [HttpPut("{id}")]
  64. public async Task<ActionResult<Todo>> PutTodo(Guid id, Todo todo)
  65. {
  66. var oldTodo = await context.Todo.FindAsync(id);
  67. oldTodo.Name = todo.Name;
  68. context.Entry(oldTodo).State = EntityState.Modified;
  69. await context.SaveChangesAsync();
  70. return oldTodo;
  71. }
  72. /// <summary>
  73. /// 删除项
  74. /// </summary>
  75. /// <param name="id"></param>
  76. /// <returns></returns>
  77. [HttpDelete("{id}")]
  78. public async Task<ActionResult<Todo>> DeleteTodo(Guid id)
  79. {
  80. var todo = await context.Todo.FindAsync(id);
  81. if (todo == null)
  82. {
  83. return NotFound();
  84. }
  85. context.Todo.Remove(todo);
  86. await context.SaveChangesAsync();
  87. return todo;
  88. }
  89. }
  90. }

通过 Postman 测试 添加新项

  • 创建新请求。

  • 将 HTTP 方法设置为“POST”。

  • 将请求 URI 设置为 https://localhost:44342/api/todos。

  • 选择“正文”选项卡。

  • 选择“原始”单选按钮。

  • 将类型设置为 JSON (application/json)

  • 在请求正文中,输入待办事项的 JSON:

    {

    "Name":"遛狗"

    }

  • 选择Send。

小结

到此我们的 ASP.NET Core API项目,已经实现“待办事项”的增删改查。但这些仅仅作为Demo参考,接下来我们会深入介绍一下我们在ASP.NET Core应用到的这些技术。