钱行慕

导航

【译】ASP.NET Core Web APIs(四):教程:使用ASP.NET Core 创建一个Web API【上】

原文链接:传送门

本教程将介绍使用ASP.NET Core创建一个Web API的基础知识。

在本教程中,你将学到如何:

  1. 创建一个Web API 工程
  2. 添加一个模型类以及一个数据库上下文
  3. 基于基架生成一个带有CRUD方法的控制器
  4. 配置路由,URL Path以及返回值
  5. 使用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的设计:

预先条件

创建一个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.

posted on 2020-06-05 21:36  钱行慕  阅读(437)  评论(0编辑  收藏  举报