• 【译】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.

  • 相关阅读:
    Java并发之同步原语
    Iterator与ListIterator的区别
    java集合之深入分析ArrayList
    深入分析HashMap
    ssm项目,web容器无法初始化项目
    疯狂java学习笔记
    Delphi 转载:图形的移动、交错、雨滴状、百页窗、积木堆叠等显现方式
    Delphi 转载:Delphi 如何GET/POST 调用HTTP请求
    Delphi 界面和组件背景透明相关方法
    Delphi 把Form界面设置有弧度的矩形
  • 原文地址:https://www.cnblogs.com/qianxingmu/p/13052432.html
Copyright © 2020-2023  润新知