【译】ASP.NET Core Web APIs(四):教程:使用ASP.NET Core 创建一个Web API【上】
原文链接:传送门。
本教程将介绍使用ASP.NET Core创建一个Web API的基础知识。
在本教程中,你将学到如何:
- 创建一个Web API 工程
- 添加一个模型类以及一个数据库上下文
- 基于基架生成一个带有CRUD方法的控制器
- 配置路由,URL Path以及返回值
- 使用Postman调用Web API
在本教程结束的时候,你会有一个web API,其可以管理存储在数据库中的 "to-do"条目。
概述
本教程创建了如下API:
API | 描述 | 请求体 | 响应体 |
---|---|---|---|
GET /api/TodoItems |
获取所有to-do 条目 | 无 | to-do 条目的数组 |
GET /api/TodoItems/{id} |
通过ID来获取一个条目 | 无 | To-do条目 |
POST /api/TodoItems |
添加一个新的条目 | To-do条目 | To-do条目 |
PUT /api/TodoItems/{id} |
更改一个已存在的条目 | To-do条目 | 无 |
DELETE /api/TodoItems/{id} |
删除一个条目 | 无 | 无 |
如下的图形显示了app的设计:
预先条件
- Visual Studio 2019 16.4 及后续版本,并带有 ASP.NET and web development 工作负载。
- .NET Core 3.1 SDK 及后续版本
创建一个Web 工程
- 选择 文件 菜单,选择 新建>>项目。
- 选择 ASP.NET Core Web Application 模板,并点击 下一步。
- 将项目命名为 TodoApi 并点击 创建。
- 在 Create a new ASP.NET Core Web Application 对话框中,确保 .NET Core 和 ASP.NET Core 3.1 被选中,选择API 模板,然后点击 创建。
测试API
项目模板创建了一个天气预报API,从浏览器中调用GET方法来测试我们的这个app。
按 Ctrl+F5 来运行app。VS会启动浏览器并导航到https://localhost:<port>/WeatherForecast,其中,<port>是一个随机选择的端口号。如果你遇到了一个对话框,它问你是否应该信任IIS Express凭证,选择 是。在接下来出现的安全警告对话框中,选择Yes。
类似于如下的JSON字符串将被返回:
[ { "date": "2019-07-16T19:04:05.7257911-06:00", "temperatureC": 52, "temperatureF": 125, "summary": "Mild" }, { "date": "2019-07-17T19:04:05.7258461-06:00", "temperatureC": 36, "temperatureF": 96, "summary": "Warm" }, { "date": "2019-07-18T19:04:05.7258467-06:00", "temperatureC": 39, "temperatureF": 102, "summary": "Cool" }, { "date": "2019-07-19T19:04:05.7258471-06:00", "temperatureC": 10, "temperatureF": 49, "summary": "Bracing" }, { "date": "2019-07-20T19:04:05.7258474-06:00", "temperatureC": -1, "temperatureF": 31, "summary": "Chilly" } ]
添加一个模型类
模型,是一组类的集合,其代表了app操作的数据。对于这个app来说,模型就是一个单独的TodoItem
类。
- 在解决方案资源管理器中,右键项目,选择 添加>>新建文件夹,将文件夹命名为 Models。
- 右键 Models文件夹,选择 添加>>类,将类命名为 TodoItem 并选择 添加。
- 使用如下代码替换模板代码。
public class TodoItem { public long Id { get; set; } public string Name { get; set; } public bool IsComplete { get; set; } }
Id 属性作为关系型数据库的唯一主键。模型类可以出现在项目的任何地方,但是按照惯例,我们会使用Models 文件夹。
添加一个数据库上下文
对于一个数据模型来说,数据库上下文是与EF协作的主类,通过继承自 Microsoft.EntityFrameworkCore.DbContext类来创建这个类。
添加 Microsoft.EntityFrameworkCore.SqlServer
在 工具 菜单栏,选择 NuGet Package Manager >> Manage NuGet Packages for Solution。
选择 Browse 标签页,然后在搜索框中输入 Microsoft.EntityFrameworkCore.SqlServer。
在左边面板中选择 Microsoft.EntityFrameworkCore.SqlServer。
在右边面板中选择 项目 复选框,然后选择 安装。
使用如上的介绍继续安装 Microsoft.EntityFrameworkCore.InMemory 包。
添加 TodoContext 数据库上下文
- 右键 Models文件夹,选择 添加>>类,将类命名为TodoContext 然后点击 添加。
- 输入如下代码:
using Microsoft.EntityFrameworkCore; namespace TodoApi.Models { public class TodoContext : DbContext { public TodoContext(DbContextOptions<TodoContext> options) : base(options) { } public DbSet<TodoItem> TodoItems { get; set; } } }
注册数据库上下文
在ASP.NET Core 中,比如数据库上下文这样的服务必须使用DI容器进行注册。容器向控制器提供了各种服务。
使用如下高亮显示的代码来更新Startup.cs:
// Unused usings removed using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; using Microsoft.EntityFrameworkCore; using TodoApi.Models; namespace TodoApi { public class Startup { public Startup(IConfiguration configuration) { Configuration = configuration; } public IConfiguration Configuration { get; } public void ConfigureServices(IServiceCollection services) { services.AddDbContext<TodoContext>(opt => opt.UseInMemoryDatabase("TodoList")); services.AddControllers(); } public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } app.UseHttpsRedirection(); app.UseRouting(); app.UseAuthorization(); app.UseEndpoints(endpoints => { endpoints.MapControllers(); }); } } }
上述代码:
- 移除了未使用的 using 声明。
- 向DI容器添加了数据库上下文。
- 指定了数据库上下文将使用一个内存数据库。
To be continued...
Next we will introduce the Controller.