第一个webapi应用

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

本文记录.Net Web API 应用

一、参考链接 微软官方文档

1.Asp .Net Core 5.0 教程 MVC
2.Asp .Net Core 5.0 教程 Web Api 应用 使用控制器创建 Web API

二、使用步骤

1.新建 web api 项目

1.1 项目名称:TodoApi

在这里插入图片描述

1.2 框架版本:.net 5.0

在这里插入图片描述

1.3 创建成功

在这里插入图片描述

1.4 快捷键 ctl + f5 运行项目

默认打开浏览器访问数据:
在这里插入图片描述

2.编写我自己的代码

2.1 更新 launchUrl

"launchUrl": "api/todoitems",

在这里插入图片描述

2.2 添加模型类

	//2.添加模型类
    public class TodoItem
    {
        public long Id { get; set; }
        public string Name { get; set; }
        public bool IsComplete { get; set; }
    }

在这里插入图片描述

2.3 添加数据库上下文

1.添加 NuGet 包:
搜索:Npgsql.EntityFrameworkCore.PostgreSQL
选择 5.0.10 版本

在这里插入图片描述

注意:可以从这里看到项目依赖的包

在这里插入图片描述

 2. 添加 TodoContext 数据库上下文
using Microsoft.EntityFrameworkCore;

namespace TodoApi.Models
{
    //3. 添加 TodoContext 数据库上下文
    public class TodoContext : DbContext
    {
        public TodoContext(DbContextOptions<TodoContext> options)
            : base(options)
        {
        }

        public DbSet<TodoItem> TodoItems { get; set; }
    }
}

在这里插入图片描述

2.4 注册数据库上下文

//使用以下代码更新 Startup.cs

//4.将数据库上下文添加到 DI 容器
//指定数据库上下文将使用 Npgsql 数据库
//注意:读取配置文件中的连接字符串的名称为:TodoContext
services.AddDbContext<TodoContext>(options =>
options.UseNpgsql(Configuration.GetConnectionString("TodoContext")));

在这里插入图片描述

2.5 配置文件中添加连接字符串

"ConnectionStrings": {
    "TodoContext": "User ID=postgres;Password=root;Host=localhost;Port=5432;Database=todo_db;CommandTimeout=1024;MaxPoolSize=1024"
  }

在这里插入图片描述

2.6 构建控制器

操作步骤:

在这里插入图片描述

在这里插入图片描述

2.7 更新 PostTodoItem create 方法

return CreatedAtAction(nameof(GetTodoItem), new { id = todoItem.Id }, todoItem);

在这里插入图片描述

2.8 设定数据库种子

using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using System;
using System.Linq;

namespace TodoApi.Models
{
    //8.设定数据库种子
    public static class SeedData
    {
        public static void Initialize(IServiceProvider serviceProvider)
        {
            using (var context = new TodoContext(
                serviceProvider.GetRequiredService<
                    DbContextOptions<TodoContext>>()))
            {
                // Look for any movies.
                // 使用 linq 语句查询 TodoItems 表中是否有数据
                if (context.TodoItems.Any())
                {
                    return;   // DB has been seeded
                }

                context.TodoItems.AddRange(
                    new TodoItem
                    {
                        Id = 1,
                        Name = "吃饭",
                        IsComplete = true
                    },
                    new TodoItem
                    {
                        Id = 2,
                        Name = "睡觉",
                        IsComplete = true
                    },
                    new TodoItem
                    {
                        Id = 3,
                        Name = "刷抖音",
                        IsComplete = false
                    },
                    new TodoItem
                    {
                        Id = 4,
                        Name = "敲代码",
                        IsComplete = true
                    }
                );
                context.SaveChanges();
            }
        }
    }
}

在这里插入图片描述

2.9 添加种子初始值设定项

using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using TodoApi.Models;

namespace TodoApi
{
    public class Program
    {
        public static void Main(string[] args)
        {
            //CreateHostBuilder(args).Build().Run();

            //6.添加种子初始值设定项
            // 调用 CreateHostBuilder()
            var host = CreateHostBuilder(args).Build();

            using (var scope = host.Services.CreateScope())
            {
                var services = scope.ServiceProvider;

                try
                {
                    //调用方法为数据库中设置初始值
                    SeedData.Initialize(services);
                }
                catch (Exception ex)
                {
                    var logger = services.GetRequiredService<ILogger<Program>>();
                    logger.LogError(ex, "An error occurred seeding the DB.");
                }
            }

            host.Run();
        }

        public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder.UseStartup<Startup>();
                });
    }
}

在这里插入图片描述

2.10 初始迁移

使用 EF Core 迁移功能来创建数据库。 迁移是可用于创建和更新数据库以匹配数据模型的一组工具,命令如下:

Add-Migration InitialCreate
Update-Database

注意:需要先通过这里的操作往数据库中建立数据表,之后启动项目的时候才能找到数据库,执行数据库初始化操作(插入数据库种子的初始值)

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

2.11 运行程序,自动打开浏览器,查看数据库已经通过数据库种子生成了初始数据

在这里插入图片描述
在这里插入图片描述


总结

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值