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~

Asp.Net Core WebApi (Swagger+EF Core/Code First)的更多相关文章

  1. Asp.net core下利用EF core实现从数据实现多租户(1)

    前言 随着互联网的的高速发展,大多数的公司由于一开始使用的传统的硬件/软件架构,导致在业务不断发展的同时,系统也逐渐地逼近传统结构的极限. 于是,系统也急需进行结构上的升级换代. 在服务端,系统的I/ ...

  2. Asp.net core下利用EF core实现从数据实现多租户(3): 按Schema分离 附加:EF Migration 操作

    前言 前段时间写了EF core实现多租户的文章,实现了根据数据库,数据表进行多租户数据隔离. 今天开始写按照Schema分离的文章. 其实还有一种,是通过在数据表内添加一个字段做多租户的,但是这种模 ...

  3. EF Core 快速上手——EF Core 入门

    EF Core 快速上手--EF Core 介绍 本章导航 从本书你能学到什么 对EF6.x 程序员的一些话 EF Core 概述 1.3.1 ORM框架的缺点 第一个EF Core应用   本文是对 ...

  4. EF Core 快速上手——EF Core的三种主要关系类型

    系列文章 EF Core 快速上手--EF Core 入门 本节导航 三种数据库关系类型建模 Migration方式创建和习修改数据库 定义和创建应用DbContext 将复杂查询拆分为子查询   本 ...

  5. asp.net core webapi 使用ef 对mysql进行增删改查,并生成Docker镜像构建容器运行

    1.构建运行mysql容器,添加数据库user 参考Docker创建运行多个mysql容器,地址 http://www.cnblogs.com/heyangyi/p/9288402.html 添加us ...

  6. 在ASP.NET Core中通过EF Core实现一个简单的全局过滤查询

    前言 不知道大家是否和我有同样的问题: 一般在数据库的设计阶段,会制定一些默认的规则,其中有一条硬性规定就是一定不要对任何表中的数据执行delete硬删除操作,因为每条数据对我们来说都是有用的,并且是 ...

  7. ASP.NET Core 中使用EF Core 将实体映射到数据库表的方法(SQL Server)

    前段时间听过一个关于使用ASP.NET Core建立项目的视频.其中使用EF Core映射到数据库的部分是按部就班地学习.今天自己建立项目时,有些步骤已经有一些遗忘.所以写下这篇文章,顺便理清思路. ...

  8. Asp.net core 学习笔记 ( ef core )

    更新 : 2018-11-26 这里记入一下关于 foreignKey cascade action 默认情况下如果我们使用 data annotation required + foreginkey ...

  9. .NET Core WebAPI Swagger使用

    相对于普通的webapi而言,.net core webapi本身并不具备文档的功能,所以可以借助第三方插件:swagger,使用的话很简单. 步骤一. Nuget Packages安装,使用程序包管 ...

随机推荐

  1. 3.CNN-卷积神经网络推导

    直接参考刘建平老师的播客~~写的炒鸡好~~https://www.cnblogs.com/pinard/p/6494810.html

  2. 2018-2019-2 网络对抗技术 20165220 Exp2 后门原理与实践

    实验内容 1.使用netcat获取主机操作Shell,cron启动2.使用socat获取主机操作Shell, 任务计划启动3.使用MSF meterpreter(或其他软件)生成可执行文件,利用nca ...

  3. 远程服务器数据交互技术:rsync,scp,mysqldump

    远程服务器间数据文件交互,可用技术:rsync,scp 速度:rsync是非加密传输,比scp快 安全:scp为加密传输 备份体量:rsync只更新差异部分,可以做增量和全量备份.scp为全量 传输方 ...

  4. 使用Anaconda虚拟环境编译caffe-gpu pycaffe

    1. 前提: 安装前服务器情况,已经安装好了: CUDNN=7.3.0 CUDA=10.0.130 Opencv 2.4.13 相应命令为: cuda 版本 cat /usr/local/cuda/v ...

  5. redux+saga+reducer

    saga.js这个文件里面的函数实际没有在其他jsx中引用吧?这个文件的作用就是把异步数据拿到,放进reducer,如果jsx想取,需要结合connect来取数据.

  6. IDEA快捷键积累

    对于用习惯了eclipse快捷键或刚转用idea的用户,可以把idea的大部分快捷键设置成eclipse风格的. 设置方式:左上角 file--->setings--->keymap,如下 ...

  7. BZOJ2143: 飞飞侠

    2143: 飞飞侠 题意: 给出两个 n ∗ m 的矩阵 A,B,以及 3 个人的坐标 在 (i, j) 支付 Ai,j 的费用可以弹射到曼哈顿距离不超过 Bi,j 的位置 问三个人汇合所需要的最小总 ...

  8. mysql数据库 ,java 代码巧妙结合提升系统性能。

       查询频繁的表t_yh_transport_task 保证数据量最少,增加查询效率, 常用于查询的字段增加索引, 每日定时移动数据 <!-- 医院系统预约任务历史删除定时器 --> & ...

  9. Centos 7安装python3(PY3.6)

    # 安装 sudo yum install centos-release-scl sudo yum install rh-python36 #开启 scl enable rh-python36 bas ...

  10. 通配符的匹配很全面, 但无法找到元素 'context:property-placeholder' 的声明。

    在Spring相应包导入正确的前提下,出现这个异常,是因为我们在引入命名空间的时候,没有正确引入它的DTD解析文件,以上面的context为例,解决办法如下: 在引入 xmlns:context=&q ...