Asp.Net Core WebApi (Swagger+EF Core/Code First)
2019-11-07

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.EntityFrameworkCoreInstall-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  --addupdate-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~

, 1, 0, 9);