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. 关于<超文本>定义

    百度百科定义: 1, 超文本是用超链接的方法,将各种不同空间的文字信息组织在一起的网状文本.它更是一种用户界面范式,用以显示文本及与文本之间相关的内容.现时超文本普遍以电子文档方式存在,其中的文字包含 ...

  2. 防御xss 大致理解

    前端 发送留言内容 包含 js 代码 后台 管理员 查看 留言 代码被执行 拿到cookie 成功登陆 解决办法 对录入 进行相关的过滤处理 其他解决方法 正在学习中

  3. SpringCloud使用Sofa-lookout监控(基于Eureka)

    本文介绍SpringCloud使用Sofa-lookout,基于Eureka服务发现. 1.前景 本文属于是前几篇文章的后续,其实一开始感觉这个没有什么必要写的,但是最近一个朋友问我关于这个的问题,所 ...

  4. NOIP2013 D1T3 货车运输 zz耻辱记

    目录 先来证明下lemma: 图上2点间最小边权最大的路径一定在MST上 感性理解下: 每次kruskal algo都连接最大的不成环边 此时有2个未联通的联通块被连起来. 那么考虑u, v两点的联通 ...

  5. CodeForces - 777B Game of Credit Cards 贪心

    题目链接: http://codeforces.com/problemset/problem/777/B 题目大意: A, B玩游戏,每人一串数字,数字不大于1000,要求每人从第一位开始报出数字,并 ...

  6. [AGC017D]Game on Tree

    [AGC017D]Game on Tree 题目大意: 一棵\(n(n\le10^5)\)个结点的树.A和B轮流进行游戏,A先手.每次删掉一棵子树,根结点不能删.最先不能操作的人输,问最后谁赢. 思路 ...

  7. Do-Now—团队冲刺博客一(领航篇)

    Do Now -- 团队冲刺博客一(领航篇) 团队博客总目录:团队作业第一周 团队作业第二周 Do Now -- 团队冲刺博客一 领航目标 ① 各个成员在 Alpha 阶段认领的任务 ② 明日各个成员 ...

  8. python爬虫实践(二)——爬取张艺谋导演的电影《影》的豆瓣影评并进行简单分析

    学了爬虫之后,都只是爬取一些简单的小页面,觉得没意思,所以我现在准备爬取一下豆瓣上张艺谋导演的“影”的短评,存入数据库,并进行简单的分析和数据可视化,因为用到的只是比较多,所以写一篇博客当做笔记. 第 ...

  9. Tips_发送请求时添加一个随机数参数,让浏览器每次都重新发请求到服务器

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  10. 34 文件地理数据库(GDB)变文件夹了怎么办

    我们都知道文件地理数据库(GDB)是ArcGIS软件特有的格式,有其独特的设计之处,在文件资源管理器中显示为.gdb的文件夹,但是里面的文件却看不明白,而且将gdb文件夹在Windows资源管理器中直 ...