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. UOJ#465. 【HNOI2019】校园旅行 其他

    原文链接www.cnblogs.com/zhouzhendong/p/UOJ465.html 前言 tmd并查集写挂,调到自闭. cly和我写挂了同一个地方. 一下救了两个人感觉挺开心. 题解 首先直 ...

  2. Linux中的官方源、镜像源汇总

    转载一篇文章,很有用 (一).企业站 搜狐: http://mirrors.sohu.com/ 网易: http://mirrors.163.com/ 阿里云: http://mirrors.aliy ...

  3. H5唤醒app,第三方开源库

    在微信浏览器内,安卓打开应用宝,ios跳进appstore,基本都可以成功在外部浏览器内,已安装可进入应用内,未安装进入应用宝提示下载,需客户端支持.<!DOCTYPE html> < ...

  4. BZOJ5326 : [Jsoi2017]博弈

    将所有物品按照$b$的选择顺序排序,则先手在任意前$i$个物品中最多只能拿走$\lceil\frac{i}{2}\rceil$个物品. 将每个物品的价值设为$a+b$,那么答案为先手拿走的价值和减去所 ...

  5. hadoop2-MapReduce详解

    本文是对Hadoop2.2.0版本的MapReduce进行详细讲解.请大家要注意版本,因为Hadoop的不同版本,源码可能是不同的. 以下是本文的大纲: 1.获取源码2.WordCount案例分析3. ...

  6. Makefile = ?= := 区别 $@,$^,$<

    = 是最基本的赋值:= 是覆盖之前的值?= 是如果没有被赋值过就赋予等号后面的值+= 是添加等号后面的值 1.“=” make会将整个makefile展开后,再决定变量的值.也就是说,变量的值将会是整 ...

  7. LeetCode 80 Remove Duplicates from Sorted Array II [Array/auto] <c++>

    LeetCode 80 Remove Duplicates from Sorted Array II [Array/auto] <c++> 给出排序好的一维数组,如果一个元素重复出现的次数 ...

  8. 十七、AJAX概述

    AJAX概述 1 什么是AJAX AJAX(Asynchronous Javascript And XML)翻译成中文就是“异步Javascript和XML”.即使用Javascript语言与服务器进 ...

  9. Python基础之迭代器、生成器

    一.迭代器: 1.迭代:每一次对过程的重复称为一次“迭代”,而每一次迭代得到的结果会作为下一次迭代的初始值.例如:循环获取容器中的元素. 2.可迭代对象(iterable): 1)定义:具有__ite ...

  10. Python tkinter 学习记录(一) --label 与 button

    最简的形式 from tkinter import * root = Tk() # 创建一个Tk实例 root.wm_title("标题") # 修改标题 root.mainloo ...