zoukankan      html  css  js  c++  java
  • 【Docker】 .Net Core 3.1 集成EF Code First (MySql) (三)

    系列目录:

    【Docker】 CentOS7 安装 Docker 及其使用方法 ( 一 )            

    【Docker】 使用Docker 在阿里云 Centos7 部署 MySQL 和 Redis (二) 

    【Docker】 .Net Core 3.1 webapi 集成EF Code First (MySql) (三) 

    .......持续不定期更新中

    之前一直用.Net Core 2.1 ,发现3.1后有很多地方和原来的操作不同,踩了一些坑,所以记录一下3.1的操作方法

    1.开发环境

      .Net Core 3.1     

      MySql : 5.7.32

    2.创建webapi项目

    3.查看项目结构,新建ValuesController ,运行项目,打开浏览器访问项目地址 XXX/api/Values

        [Route("api/[controller]")]
        [ApiController]
        public class ValuesController : ControllerBase
        {
            [HttpGet]
            public string Get()
            {
                return "value";
            }
        }

    4.集成EntityFramework,打开Nuget,安装EntityFramework的包 

    下载如下包:

    Pomelo.EntityFrameworkCore.MySql      此包用于集成EF,进行增删改查等操作

    Microsoft.EntityFrameworkCore.Tools     此包是EF工具包,没有不可以使用数据迁移更新数据库

    P.S : MySql.Data.XXX   等Mysql官方包不可用 最新版8.0.22 目前不支持.Net Core 3.1,安装后不可用 。

    appsetting.json文件添加数据库连接

    "ConnectionStrings": {
        "conn": "Data Source=localhost;Database=test;User ID=root;Password=sima1234;port=3306;sslmode=none;"
     },

    添加数据库DbContext类

    public class MyDbContext : DbContext
    {
        public MyDbContext(DbContextOptions<MyDbContext> options) : base(options)
        {
        }
        public DbSet<User> users { get; set; }
    }    

    打开startup.cs,把db对象注入一下,方便Controller层使用,再改造一下Controller,把路径改成自定义。

    services.AddScoped<DbContext, MyDbContext>();   //注入一下db对象
    services.AddDbContext<MyDbContext>(options => options.UseMySql(Configuration.GetConnectionString("conn")));

    5.打开程序包管理控制台,使用Code First创建数据库

     

    add-Migration init    \ init是名字 随便自己取名字  如果有错可以用 Remove-Migration 回退
    update-database \ 上一步成功后更新数据库

    生成的Migration迁移文件

     

    打开数据库查看,user成功创建,另外那张表是ef数据迁移版本记录表

    6.修改Controller层代码,自定义访问路径

        [Route("/[controller]/[action]")]
        [ApiController]
        public class ValuesController : ControllerBase
        {
            private DbContext _db;
            public ValuesController(MyDbContext db)
            {
                this._db = db;
            }
    
            [HttpGet]
            public async Task<string> Add()
            {
                User user = new User();
                user.Username = "admin";
                user.Password = "123456";
                await _db.Set<User>().AddAsync(user);
                await _db.SaveChangesAsync();
                return "value";
            }
        }

    运行结果,注意!访问地址已经为自己定义的了。

     

    7 配置swagger

    配置swagger 用于自动生成接口文档,给前端同事查看。 

    下载此包 Swashbuckle.AspNetCore

    将 Swagger 生成器添加到 Startup.ConfigureServices 方法中的服务集合中:

    P.S: .Net Core 3.1之后的版本  不用使用 new Info 要用 new OpenApiInfo 

    // 注册Swagger,定义一个和多个文档
    services.AddSwaggerGen(c =>
    {
       c.SwaggerDoc("v1", new OpenApiInfo { Title = "My API", Version = "v1" });
    });

    在 Startup.Configure 方法中,启用中间件为生成 Swagger。

    // 启用中间件服务生成Swagger            
    app.UseSwagger(); app.UseSwaggerUI(c
    => { c.SwaggerEndpoint("/swagger/v1/swagger.json", "接口文档"); });

    修改接口代码

         /// <summary>
            /// 添加用户
            /// </summary>
            /// <param name="user">用户实体</param>
            /// <returns></returns>
            [HttpPost]
            public async Task<string> Add(User user)
            {
                await _db.Set<User>().AddAsync(user);
                await _db.SaveChangesAsync();
                return "value";
            }
    
            /// <summary>
            /// 获取所有用户
            /// </summary>
            /// <returns>所有用户</returns>
            [HttpGet]
            public async Task<List<User>> GetList()
            {
                var list = await _db.Set<User>().ToListAsync();
                return list;
            }

    打开网站 访问   XXXX/swagger/inedx.html 访问Swagger文档,接口信息成功显示

    8. wagger显示接口注释

    右键点击项目-属性-生成,输出xml文档文件,打钩,用于swagger调用显示注释。

     

    修改Startup.cs文件中配置

           services.AddSwaggerGen(c =>
                {
                    c.SwaggerDoc("v1", new OpenApiInfo { Title = "司马的Api", Version = "v1" });
                    // 获取xml文件名
                    var xmlFile = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml";
                    // 获取xml文件路径
                    var basePath = Path.GetDirectoryName(typeof(Program).Assembly.Location);//获取应用程序所在目录(绝对,不受工作目录影响,建议采用此方法获取路径)
                    var xmlPath = Path.Combine(basePath, xmlFile);
                    // 添加控制器层注释,true表示显示控制器注释
                    c.IncludeXmlComments(xmlPath, true);
                });

    P.S 还有一个坑,记得如果发布选择的是Debug模式,才会有这个xml生成,如果是release模式,就不会生成xml文件。

    运行项目,查看,已经有了注释

     

    9. 关闭需要输入注释的警告

    项目中有些不想输入注释的地方也会提示要求输入注释!很烦 !

    右键点击项目-属性,取消显示警告,添加1591

     

    添加后重新运行项目,问题解决。

  • 相关阅读:
    墨者-(RCE)Apache Struts2远程代码执行漏洞(S2-032)
    Apache Struts2远程代码执行漏洞(S2-015)
    墨者-(RCE)Webmin未经身份验证的远程代码执行
    MySQL注入点写入WebShell的几种方式
    墨者-rsync未授权访问漏洞利用
    墨者-Ruby On Rails漏洞复现第二题(CVE-2019-5418)
    墨者 Ruby On Rails漏洞复现第一题(CVE-2018-3760)
    SROP利用技术
    技巧点滴
    S2-045漏洞利用脚本汇总
  • 原文地址:https://www.cnblogs.com/simawenbo/p/13995512.html
Copyright © 2011-2022 走看看