zoukankan      html  css  js  c++  java
  • Asp.Net Core WebApi (Swagger+EF Core/Code First)

    Swagger简介:

    Swagger™的目标是为REST APIs 定义一个标准的,与语言无关的接口,使人和计算机在看不到源码或者看不到文档或者不能通过网络流量检测的情况下能发现和理解各种服务的功能。当服务通过Swagger定义,消费者就能与远程的服务互动通过少量的实现逻辑。类似于低级编程接口,Swagger去掉了调用服务时的很多猜测。 

    创建一个Asp.Net Core WebApi项目。

    想要使用我们的Swagger你必须有Api,所以呢我们先构造一个数据库,当然我们可以使用DbFist,我们这里为了让大家学习一下如何使用CodeFirst,就代码优先吧。

    这里附DbFirst的简单用法传送门:https://www.cnblogs.com/ZaraNet/p/10101327.html

    当然你要使用DBfirst我也不拦着你,毕竟大型架构中,CodeFirst只是神经病的做法,没有哪个傻子会这么干吧。想要使用CodeFirst,我们需要引用两个类库.

    Install-Package Microsoft.EntityFrameworkCore

    Install-Package Microsoft.EntityFrameworkCore.SqlServer
    Install-Package Microsoft.EntityFrameworkCore.Tools

    再之后我们就应该去创建我们的实体了,在项目中创建一个名叫Model的文件夹,定义一个Product(产品)类。

    namespace WebApiSwaggerDemo.Model
    {
        public class Product
        {
            [Key]
            public int ProductId { get; set; }
            [Required,MaxLength(30)]
            public string ProductName { get; set; }
        }
    }

    这里一个非常简单的类就定义好了,我们CodeFirst是需要创建上下文的,我们继续在model文件夹中创建DataContext.cs文件。

    在这个类中引用using Microsoft.EntityFrameworkCore,再继承DbContext去实现父类的构造函数。

    public class DataContext :DbContext
        {
            public DataContext(DbContextOptions<DataContext> options)
                : base(options)
            {
    
            }
            public DbSet<Product> Products { get; set; }
        }

     创建完实体之后,我们就可以去创建我们的数据库了,即是在middleWare中去配置,当然你也是可以在项目启动的时候,那我们就先看看在Startup.cs中。

    我们在这里分为两种形式 1.程序启动配置 2.中间件

     public void ConfigureServices(IServiceCollection services)
            {
                var connection = "Data Source=.;Initial Catalog=EFCore;User ID=sa;Password=sa";
                services.AddDbContext<DataContext>(options => options.UseSqlServer(connection));
           services.AddMvc(); }

    在其中一定要引用using Microsoft.EntityFrameworkCore;那么这样就没有什么问题了,那么采用中间件模式的话,我们可以在DbContext做一些手脚。我们先看看DbContext中的定义,看看有没有config的关键词。

    我们可以试着把这一堆英文翻译一下,当然我这只是英语不好.意思就是重写这个方法去配置上下文。

    所以我们可以试着去重写这个方法,而且这个参数相信大家都非常眼熟,也就是Builder。

     public class DataContext :DbContext
        {
            public DbSet<Product> Products { get; set; }
    
            protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
            {
                optionsBuilder.UseSqlServer(
                    "Data Source=.;Initial Catalog=EFCore;User ID=sa;Password=sa");
            }
            protected override void OnModelCreating(ModelBuilder modelBuilder)
            {
                //当model创建的时候 ,你可以添加一些特性
                base.OnModelCreating(modelBuilder);
                //modelBuilder.Entity<Product>().HasIndex(u => u.ProductName).IsUnique();
            }
        }
    

     在程序包管理器控制台输入以下两个命令,可以控制数据库版本。

    • Add-Migration DbName  --add
    • update-database DbName --update

    输入完之后回车即可,我们可以发现Migrations生成了文件,其中DataContextModelSnapshot是给数据库进行了映射,关系啊什么的。

    数据库就生成好了,这个数据库就是记录了这个数据库版本什么的 ,可以说是更新日志吧。

     我们现在开始使用Swagger,如何使用呢,我们需要去安装Swashbuckle.AspNetCore

    命令:Install-Package Swashbuckle.AspNetCore    也可以直接nuget管理包页面去安装。

    安装部署到项目之中呢,我们需要配置Swagger中间件,在Starup中先引入。

    using Swashbuckle.AspNetCore.Swagger;

    首先 我们定义一个SwaggerInfo类,用于注册的信息。

    public class SwaggerInfo
        {
            public string Version { get; set; }
            public string Title { get; set; }
            public string Description { get; set; }
        }
    

    再在Startup.ConfigureServices 中添加Swagger服务。

    public void ConfigureServices(IServiceCollection services)
            {
                services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
                services.AddSwaggerGen(c =>
                {
                    c.SwaggerDoc("v1", new OpenApiInfo { Title = "My API", Version = "v1",Description="张子浩的测试API",
                        Contact = new OpenApiContact
                        {
                            Name = "张子浩",
                            Email = string.Empty,
                            Url = new Uri("https://www.cnblogs.com/zaranet")
    
                        },License = new OpenApiLicense
                        {
                            Name = "许可证名字",
                            Url = new Uri("https://www.cnblogs.com/zaranet")
                        }
                    }
                    );
                });
            }
    

      最后在Startup.Configure中,启动中间件。

     public void Configure(IApplicationBuilder app, IHostingEnvironment env)
            {
                //.....
                app.UseSwagger();
                app.UseSwaggerUI(c =>
                {
                    c.SwaggerEndpoint("/swagger/v1/swagger.json", "My API V1");
                });
            }    
    

     启动:http://localhost:端口/swagger/index.html,以下为效果图:

    但是我们没有发现注释,我们应该怎么办呢?在添加服务的时候再添加这几行代码:

     var basePath = Path.GetDirectoryName(typeof(Program).Assembly.Location);
                    var xmlPath = Path.Combine(basePath, "SwaggerDemo.xml");
                    c.IncludeXmlComments(xmlPath);

    重新运行,看下效果,ok~

  • 相关阅读:
    强化学习快速入门
    Spark GraphX图计算简单案例【代码实现,源码分析】
    CDA数据分析【第二章:数据收集与导入】
    CDA数据分析实务【第一章:营销决策分析概述】
    CDA数据分析【第一章:数据分析概述】
    BLAS快速入门
    Tachyon内存文件系统快速入门
    Solr新特性【4.x,5.x,6.x,7.x】
    利用Redis keyspace notification(键空间通知)实现过期提醒
    设计模式 行为型
  • 原文地址:https://www.cnblogs.com/ZaraNet/p/10113111.html
Copyright © 2011-2022 走看看