idea swagger生成接口文档_.NetCore3.1中使用Swagger生成接口文档
前言
本来在Swagger的基础上,前后端开发人员在开发生产期间,可以借此进行更加便捷的沟通交流。可是总有些时候,遇到一些难缠的,又不讲道理,偏偏觉得将Swagger文档地址丢给客户会不够正式!死活要一份word文档。
可是这个时候,如果接口数量上百个,甚至更多,一个一个手动输入word,那将是一笔耗时的工作。但却有什么办法可以解决呢?
对了,利用Swagge生成的Json文件转换为word文档不就可以了吗?
思路
1. 获取Swagger接口文档的Json文件
2. 解析Json文件数据填充到Html的表格中
3.根据生成的html转work文档
开始
一、根据Swagger版本获取Json数据
1.通过Swagger源码文件可以看到
可以拿到swagger生成的文档数据,所以我们可以新建一个控制器SwaggerController.cs,
private readonly SwaggerGenerator _swaggerGenerator; public SwaggerController(SwaggerGenerator swaggerGenerator) { _swaggerGenerator = swaggerGenerator; } /// /// 导出文件 /// /// 文件类型 /// 版本号V1 /// [HttpGet] public FileResult ExportWord(string type,string version) { string contenttype = string.Empty; var model = _swaggerGenerator.GetSwagger(version); //1. 根据指定版本获取指定版本的json对象。 }
2. 在Startup.cs文件中,利用net core的ioc容器,注入SwaggerGenerator实例化,这样在后面的调用中可以直接使用这个方法
services.AddScoped(); //注入SwaggerGenerator,后面可以直接使用这个方法
二、文件数据填充到Html的表格中
根据上面获取的model文件数据,这个时候,我们利用Razor文件,结合html的table模板,将数据遍历填充到页面中,生成完整的页面
Html模板
@using Swashbuckle.AspNetCore.Swagger; Swagger API文档代码文件
Word接口文档
@Model.Info.Title
接口文档 @Model.Info.Version
联系方式
作者:@Model.Info.Contact.Name
Send email to Xunit.Core
@Model.Info.Contact.Name - Website
接口描述
@Model.Info.Description
说明 类型 @foreach (var item in Model.Paths) { if (item.Value.Operations != null) { foreach (var operation in item.Value.Operations) {
@operation.Value.Summary
URL @item.Key 请求方式 @operation.Key @if (operation.Value.Parameters != null && operation.Value.Parameters.Count > 0) { 参数名 参数类型 是否必填 说明 @foreach (var param in operation.Value.Parameters) { @param.Name @param.In @param.Required @param.Description } } 状态码 说明 @if (operation.Value.Responses != null && operation.Value.Responses.Count > 0) { foreach (var response in operation.Value.Responses) { @response.Key @response.Value.Description } } 示例 请求参数 返回值
} } }
将数据遍历到静态页面中,
/// /// 将数据遍历静态页面中 /// /// 静态页面地址 /// 获取到的文件数据 /// public static string GeneritorSwaggerHtml(string templatePath, OpenApiDocument model) { var template = System.IO.File.ReadAllText(templatePath); var result = Engine.Razor.RunCompile(template, "i3yuan", typeof(OpenApiDocument), model); return result; }
三、根据生成的html转work文档
/// /// 静态页面转文件 /// /// 静态页面html /// 文件类型 /// 上下文类型 /// public Stream SwaggerConversHtml(string html, string type, out string contenttype) { string fileName = Guid.NewGuid().ToString() + type; //文件存放路径 string webRootPath = _hostingEnvironment.WebRootPath; string path = webRootPath + @"FilesTempFiles"; var addrUrl = path + $"{fileName}"; FileStream fileStream = null; var provider = new FileExtensionContentTypeProvider(); contenttype = provider.Mappings[type]; try { if (!Directory.Exists(path)) { Directory.CreateDirectory(path); } var data = Encoding.Default.GetBytes(html); var stream = ByteHelper.BytesToStream(data); //创建Document实例 Document document = new Document(); //加载HTML文档 document.LoadFromStream(stream, FileFormat.Html, XHTMLValidationType.None); //保存为Word document.SaveToFile(addrUrl, FileFormat.Docx); document.Close(); fileStream = File.Open(addrUrl, FileMode.OpenOrCreate); var filedata = ByteHelper.StreamToBytes(fileStream); var outdata = ByteHelper.BytesToStream(filedata); return outdata; } catch (Exception) { throw; } finally { if (fileStream != null) fileStream.Close(); if (File.Exists(addrUrl)) File.Delete(addrUrl);//删掉文件 } }
public class ByteHelper { public static byte[] StreamToBytes(Stream stream) { byte[] bytes = new byte[stream.Length]; stream.Read(bytes, 0, bytes.Length); // 设置当前流的位置为流的开始 stream.Seek(0, SeekOrigin.Begin); return bytes; } /// 将 byte[] 转成 Stream public static Stream BytesToStream(byte[] bytes) { Stream stream = new MemoryStream(bytes); return stream; } }
四、最终效果
将html转换为word后,我们就可以看到带有 .doc 的效果了!差不多是如下效果
总结
1. 到这基本就结束了,通过简易的几个接口的方式,展示了如何通过将Swagger接口文档生成word文档。可以根据自己的html模板生成各式的word样式文档说明。
2.写这篇番外主要是因为之前介绍了关于如何使用Swagger生成在线文档,但实际工作中,可能也会遇到这种要各种正式word文档的客户,所以在此分享一些想法和思路,同时希望大家不吝指教。
idea swagger生成接口文档_.NetCore3.1中使用Swagger生成接口文档相关推荐
- java 接口鉴权_安全|Java中使用JWT生成Token进行接口鉴权实现
先介绍下利用JWT进行鉴权的思路: 1.用户发起登录请求. 2.服务端创建一个加密后的JWT信息,作为Token返回. 3.在后续请求中JWT信息作为请求头,发给服务端. 4.服务端拿到JWT之后进行 ...
- oracle中文文档_如果你还在用Swagger(丝袜哥)生成接口文档,那就真有点老“土”了!...
JApiDocs是一个无需额外注解.开箱即用的SpringBoot接口文档生成工具. 编写和维护API文档这个事情,对于后端程序员来说,是一件恼人但又不得不做的事情,我们都不喜欢写文档,但除非项目前后 ...
- python如何读取公共盘的文档_如何使用 Sphinx 给 Python 代码写文档 | Linux 中国
最好将文档作为开发过程的一部分.Sphinx 加上 Tox,让文档可以轻松书写,并且外观漂亮.-- Moshe Zadka Python 代码可以在源码中包含文档.这种方式默认依靠 docstring ...
- java web 操作word文档_Java Web项目中使用Freemarker生成Word文档
Web项目中生成Word文档的操作屡见不鲜.基于Java的解决方式也是非常多的,包含使用Jacob.Apache POI.Java2Word.iText等各种方式,事实上在从Office 2003開始 ...
- 苹果手机怎么编辑word文档_原创首发:编辑和修改PDF文档,将PDF转换为WORD技巧...
在之前的文章中介绍了如何将图片合成为PDF文档,今天将为大家介绍下如何编辑和修改PDF文档,以及将PDF转换为WORD的技巧. 使用到工具Adobe Acrobat 编辑和修改PDF 文档 方法1.使 ...
- 软件项目文档_什么是软件项目的好的文档?
软件项目文档 开放地理空间(OSGeo)基金会最近参加了Google的第一个文档季节 ,其中Google赞助了高级技术作家为开源项目做出贡献. OSGeo是大约50个地理空间开源项目的总括组织. 多年 ...
- 苹果手机怎么编辑word文档_多人协同编辑一份Word文档用修订功能就对了
在职场中我们难免会遇到需要与同事协同编辑一份文档的情况 那么如何清晰不混乱地协同编辑呢? 如下图所示,相信不少人在协同编辑文档时都是这样做的,用各种颜色字和括号,写明自己想编辑的内容及要修改的点.一旦 ...
- 雷电3接口能干嘛_把雷电3插到TypeC接口了?不认识电脑接口的小伙伴看过来
大部分用户在选购笔记本时 会关注处理器.显卡.外观.重量等参数 但关注电脑接口的 却少之又少 不过 在使用过程中 一套完整的.设计合理的接口配置 对我们的体验有着非常重要的作用 效率提升不止一点点哦 ...
- java接口与集合_【总结】Java常用集合接口与集合类
目录常见集合接口概述Collection Map Collection接口 Map接口 补充内容 常见集合接口概述 Java中包含许多集合接口.其中比较常见的主要是Collection接口和Map接口 ...
- java8的函数式接口的好处_浅谈Java 8 新增函数式接口到底是什么
从 Java 8 开始便出现了函数式接口(Functional Interface,以下简称FI) 定义为: 如果一个接口只有唯一的一个抽象接口,则称之为函数式接口.为了保证接口符合 FI ,通常会在 ...
最新文章
- Intersection of Two Linked Lists——经典问题
- python3.7.2教程-python 3.7极速入门教程2 Hello与变量
- python教程书籍推荐-买Python入门书籍,我推荐这一本
- hibernate 延迟加载的错误 failed to lazily initialize a collection of role
- 2020年11月3日 星期二 工作日志 github登陆不了了,晕
- html5 --- 使用canvas画一个渐变矩形
- char数组拷贝wchar数组
- 全面认识UML-类图元素(java)
- Redis面试 - 如何保证缓存与数据库的双写一致性?
- CentOS5.5下SVN部署文档
- 题解【luogu P2421 bzoj P1407 [NOI2002]荒岛野人】
- ros多机通讯的办法
- linux的审计功能(audit)
- 【图像去噪】基于matlab中值+均值+高斯+Laplacian+Sobel+Prewitt图像去噪【含Matlab源码 025期】
- Matlab中直方图的绘制histogram函数
- python学习2——if语句、elif、if嵌套、while循环、while嵌套
- 【C语言】利用队列的思维理解移位运算符和移位函数
- 【ThreeJS基础教程-初识Threejs】1.6各种各样的几何体
- Kafka集群的安全认证机构 SASL_SCRAM
- linux里nohup用法,小飞博客-Linux nohup用法