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~
Asp.Net Core WebApi (Swagger+EF Core/Code First)的更多相关文章
- Asp.net core下利用EF core实现从数据实现多租户(1)
前言 随着互联网的的高速发展,大多数的公司由于一开始使用的传统的硬件/软件架构,导致在业务不断发展的同时,系统也逐渐地逼近传统结构的极限. 于是,系统也急需进行结构上的升级换代. 在服务端,系统的I/ ...
- Asp.net core下利用EF core实现从数据实现多租户(3): 按Schema分离 附加:EF Migration 操作
前言 前段时间写了EF core实现多租户的文章,实现了根据数据库,数据表进行多租户数据隔离. 今天开始写按照Schema分离的文章. 其实还有一种,是通过在数据表内添加一个字段做多租户的,但是这种模 ...
- EF Core 快速上手——EF Core 入门
EF Core 快速上手--EF Core 介绍 本章导航 从本书你能学到什么 对EF6.x 程序员的一些话 EF Core 概述 1.3.1 ORM框架的缺点 第一个EF Core应用 本文是对 ...
- EF Core 快速上手——EF Core的三种主要关系类型
系列文章 EF Core 快速上手--EF Core 入门 本节导航 三种数据库关系类型建模 Migration方式创建和习修改数据库 定义和创建应用DbContext 将复杂查询拆分为子查询 本 ...
- asp.net core webapi 使用ef 对mysql进行增删改查,并生成Docker镜像构建容器运行
1.构建运行mysql容器,添加数据库user 参考Docker创建运行多个mysql容器,地址 http://www.cnblogs.com/heyangyi/p/9288402.html 添加us ...
- 在ASP.NET Core中通过EF Core实现一个简单的全局过滤查询
前言 不知道大家是否和我有同样的问题: 一般在数据库的设计阶段,会制定一些默认的规则,其中有一条硬性规定就是一定不要对任何表中的数据执行delete硬删除操作,因为每条数据对我们来说都是有用的,并且是 ...
- ASP.NET Core 中使用EF Core 将实体映射到数据库表的方法(SQL Server)
前段时间听过一个关于使用ASP.NET Core建立项目的视频.其中使用EF Core映射到数据库的部分是按部就班地学习.今天自己建立项目时,有些步骤已经有一些遗忘.所以写下这篇文章,顺便理清思路. ...
- Asp.net core 学习笔记 ( ef core )
更新 : 2018-11-26 这里记入一下关于 foreignKey cascade action 默认情况下如果我们使用 data annotation required + foreginkey ...
- .NET Core WebAPI Swagger使用
相对于普通的webapi而言,.net core webapi本身并不具备文档的功能,所以可以借助第三方插件:swagger,使用的话很简单. 步骤一. Nuget Packages安装,使用程序包管 ...
随机推荐
- Excel—工作常用
上周起始日期 =TODAY()-WEEKDAY(TODAY(),2)-6 TODAY()表示的是当天的日期,WEEKDAY(TODAY(),2)表示本周的星期几,TODAY()-WEEKDAY(TOD ...
- linux学习之命令的排列、替换和别名--2019-04-23
1.命令的排列 1)使用“;” 使用“;”命令时,不管命令1是否出错,接下来都执行命令2. 2)使用“&&” 使用“&&”命令时,只有命令1正确运行,接下来才会执行命令 ...
- Codeforces 126B. Password (KMP)
<题目链接> 题目大意:给定一个字符串,从中找出一个前.中.后缀最长公共子串("中"代表着既不是前缀,也不是后缀的部分). 解题分析:本题依然是利用了KMP中next数 ...
- 用python做一个搜索引擎(Pylucene)
什么是搜索引擎? 搜索引擎是“对网络信息资源进行搜集整理并提供信息查询服务的系统,包括信息搜集.信息整理和用户查询三部分”.如图1是搜索引擎的一般结构,信息搜集模块从网络采集信息到网络信息库之中(一般 ...
- Django合集
Django基础 Django--简介 Django--web框架简介 浅析uWSGI.uwsgi.wsgi Django--url(路由)配置 Django--模板层 Django--视图层 Dja ...
- MVC5 Razor视图中不规范书写导致的编译问题
今天碰到一个非常让人难以理解的问题,如图所示,但是我在代码中并没有找到缺失"}"的地方: 根据源文件提示有去 AppData\Local\Temp\Temporary ASP.NE ...
- Centos服务器上NFS灾备环境及KVM的搭建及使用
1.概述 由于在单台服务器上搭建灾备环境需要KVM和NFS的支持,下面先列出KVM的搭建流程,再列出使用NFS实现单台服务器灾备的流程. A.搭建KVM环境 1>.主机环境准备 Linux Sy ...
- 771. Jewels and Stones
You're given strings J representing the types of stones that are jewels, and S representing the ston ...
- 【ASP】session实现购物车
1.问题提出 利用session内置对象,设计并实现一个简易的购物车,要求如下: 1)利用用户名和密码,登录进入购物车首页 2)购物首页显示登录的用户名以及该用户是第几位访客.(同一用户的刷新应该记录 ...
- NumPy库
NumPy详细教程(官网手册翻译) Python之Numpy详细教程 一.基础篇 1.NumPy - Ndarray 对象 ndarray描述相同类型的元素集合, 可以使用基于零的索引访问集合中的项目 ...