MVC-WebApi配置 Swagger(Web Api可视化文档)
一、从创建MVC WebApi开始
第一步创建MVC WebApi就创建好了,接下来就进入正题,上干货
==========================================================================================================
二 、使用nuget引入Swashbuckle包
下载完成后App_Start文件夹下会多出一个SwaggerConfig文件
第二步就完成了,然后就是进行配置Swagger了
======================================================================
三、打开项目属性->生成,勾选生成xml文档文件(注:最好选择默认,因为之后还需要用到)
=======================================================================
四、配置SwaggerConfig文件
(1)把代码(var xmlAPI = $@"{AppDomain.CurrentDomain.BaseDirectory}\bin\WebApplication.xml";)放到Register中
- .EnableSwagger(c =>
{
c.SingleApiVersion("v1", "CreateSwaggerApi");
var xmlAPI = $@"{AppDomain.CurrentDomain.BaseDirectory}\bin\WebApplication.xml";//刚刚生成的XML注释文件
})
(2)把代码(c.IncludeXmlComments(xmlAPI);)放到.EnableSwagger中
- c.IncludeXmlComments(xmlAPI);
这时候初始已经完成了,现在来看看结果
我们刚开始运行的是默认的地址,这时候只要手动在端口号后边加上Swagger然后回车就可以看到我们想看到的页面了
五、汉化
(1)首先需要新建一个汉化的JS文件,最好建立在Script下边,JS文件名字自己定义,然后把代码复制进去
- /// <summary>
- /// 中文转换
- /// </summary>
- var SwaggerTranslator = (function () {
- //定时执行检测是否转换成中文,最多执行500次 即500*50/1000=25s
- var iexcute = 0,
- //中文语言包
- _words = {
- "Warning: Deprecated": "警告:已过时",
- "Implementation Notes": "实现备注",
- "Response Class": "响应类",
- "Status": "状态",
- "Parameters": "参数",
- "Parameter": "参数",
- "Value": "值",
- "Description": "描述",
- "Parameter Type": "参数类型",
- "Data Type": "数据类型",
- "Response Messages": "响应消息",
- "HTTP Status Code": "HTTP状态码",
- "Reason": "原因",
- "Response Model": "响应模型",
- "Request URL": "请求URL",
- "Response Body": "响应体",
- "Response Code": "响应码",
- "Response Headers": "响应头",
- "Hide Response": "隐藏响应",
- "Headers": "头",
- "Try it out!": "试一下!",
- "Show/Hide": "显示/隐藏",
- "List Operations": "显示操作",
- "Expand Operations": "展开操作",
- "Raw": "原始",
- "can't parse JSON. Raw result": "无法解析JSON. 原始结果",
- "Model Schema": "模型架构",
- "Model": "模型",
- "apply": "应用",
- "Username": "用户名",
- "Password": "密码",
- "Terms of service": "服务条款",
- "Created by": "创建者",
- "See more at": "查看更多:",
- "Contact the developer": "联系开发者",
- "api version": "api版本",
- "Response Content Type": "响应Content Type",
- "fetching resource": "正在获取资源",
- "fetching resource list": "正在获取资源列表",
- "Explore": "浏览",
- "Show Swagger Petstore Example Apis": "显示 Swagger Petstore 示例 Apis",
- "Can't read from server. It may not have the appropriate access-control-origin settings.": "无法从服务器读取。可能没有正确设置access-control-origin。",
- "Please specify the protocol for": "请指定协议:",
- "Can't read swagger JSON from": "无法读取swagger JSON于",
- "Finished Loading Resource Information. Rendering Swagger UI": "已加载资源信息。正在渲染Swagger UI",
- "Unable to read api": "无法读取api",
- "from path": "从路径",
- "Click to set as parameter value": "点击设置参数",
- "server returned": "服务器返回"
- },
- //定时执行转换
- _translator2Cn = function () {
- if ($("#resources_container .resource").length > 0) {
- _tryTranslate();
- }
- if ($("#explore").text() == "Explore" && iexcute < 500) {
- iexcute++;
- setTimeout(_translator2Cn, 50);
- }
- },
- //设置控制器注释
- _setControllerSummary = function () {
- $.ajax({
- type: "get",
- async: true,
- url: $("#input_baseUrl").val(),
- dataType: "json",
- success: function (data) {
- var summaryDict = data.ControllerDesc;
- var id, controllerName, strSummary;
- $("#resources_container .resource").each(function (i, item) {
- id = $(item).attr("id");
- if (id) {
- controllerName = id.substring(9);
- strSummary = summaryDict[controllerName];
- if (strSummary) {
- $(item).children(".heading").children(".options").prepend('<li class="controller-summary" title="' + strSummary + '">' + strSummary + '</li>');
- }
- }
- });
- }
- });
- },
- //尝试将英文转换成中文
- _tryTranslate = function () {
- $('[data-sw-translate]').each(function () {
- $(this).html(_getLangDesc($(this).html()));
- $(this).val(_getLangDesc($(this).val()));
- $(this).attr('title', _getLangDesc($(this).attr('title')));
- });
- },
- _getLangDesc = function (word) {
- return _words[$.trim(word)] !== undefined ? _words[$.trim(word)] : word;
- };
- return {
- Translator: function () {
- document.title = "API描述文档";
- $('body').append('<style type="text/css">.controller-summary{color:#10a54a !important;word-break:keep-all;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:250px;text-align:right;cursor:default;} </style>');
- $("#logo").html("接口描述").attr("href", "/Home/Index");
- //设置控制器描述
- _setControllerSummary();
- _translator2Cn();
- }
- }
- })();
- //执行转换
- SwaggerTranslator.Translator();
第一步有了然后修改JS的文件属性,生成设置修改为嵌入式文件
然后在SwaggerConfig文件里加入配置
- c.InjectJavaScript(thisAssembly, "WebApplication.Scripts.Swagger_Lener.js");//JS就是你自己定义的JS
================================================================================
六、在App_Start目录下创建类文件CachingSwaggerProvider(直接创建CachingSwaggerProvider类,然后复制下边代码就ok,如果报红,引用一下文件就好)
- public class CachingSwaggerProvider : ISwaggerProvider
- {
- private readonly ISwaggerProvider _swaggerProvider;
- private static ConcurrentDictionary<string, SwaggerDocument> _cache =
- new ConcurrentDictionary<string, SwaggerDocument>();
- private readonly string _xml;
- public CachingSwaggerProvider(ISwaggerProvider swaggerProvider, string xml)
- {
- _swaggerProvider = swaggerProvider;
- _xml = xml;
- }
- public SwaggerDocument GetSwagger(string rootUrl, string apiVersion)
- {
- var cacheKey = string.Format("{0}_{1}", rootUrl, apiVersion);
- SwaggerDocument srcDoc = null;
- //只读取一次
- if (!_cache.TryGetValue(cacheKey, out srcDoc))
- {
- srcDoc = _swaggerProvider.GetSwagger(rootUrl, apiVersion);
- srcDoc.vendorExtensions = new Dictionary<string, object> { { "ControllerDesc", GetControllerDesc() } };
- _cache.TryAdd(cacheKey, srcDoc);
- }
- return srcDoc;
- }
- /// <summary>
- /// 从API文档中读取控制器描述
- /// </summary>
- /// <returns>所有控制器描述</returns>
- public ConcurrentDictionary<string, string> GetControllerDesc()
- {
- string xmlpath = _xml;
- ConcurrentDictionary<string, string> controllerDescDict = new ConcurrentDictionary<string, string>();
- if (File.Exists(xmlpath))
- {
- XmlDocument xmldoc = new XmlDocument();
- xmldoc.Load(xmlpath);
- string type = string.Empty, path = string.Empty, controllerName = string.Empty;
- string[] arrPath;
- int length = -1, cCount = "Controller".Length;
- XmlNode summaryNode = null;
- foreach (XmlNode node in xmldoc.SelectNodes("//member"))
- {
- type = node.Attributes["name"].Value;
- if (type.StartsWith("T:"))
- {
- //控制器
- arrPath = type.Split('.');
- length = arrPath.Length;
- controllerName = arrPath[length - 1];
- if (controllerName.EndsWith("Controller"))
- {
- //获取控制器注释
- summaryNode = node.SelectSingleNode("summary");
- string key = controllerName.Remove(controllerName.Length - cCount, cCount);
- if (summaryNode != null && !string.IsNullOrEmpty(summaryNode.InnerText) && !controllerDescDict.ContainsKey(key))
- {
- controllerDescDict.TryAdd(key, summaryNode.InnerText.Trim());
- }
- }
- }
- }
- }
- return controllerDescDict;
- }
- }
=======================================================================
七、还需要再在SwaggerConfig文件里加入配置
- c.CustomProvider((defaultProvider) => new CachingSwaggerProvider(defaultProvider, xmlAPI));
- c.ResolveConflictingActions(apiDescriptions => apiDescriptions.First());
===============================================================================================
八、老天啊,最后一步了,做这玩意真是累啊,靠, 打开 App_Start文件下的WebApiConfig文件然后添加一个action就OK啦。
从头到尾自己动手试的,没得问题,有问题我也解决不了,我只是个代码的搬运工,如果你看不下去,请去https://www.cnblogs.com/xiaonangua/p/11766486.html
好累啊,好累,一晚没睡整这玩意,不容易啊。
MVC-WebApi配置 Swagger(Web Api可视化文档)的更多相关文章
- golang学习笔记7 使用beego swagger 实现API自动化文档
golang学习笔记7 使用beego swagger 实现API自动化文档 API 自动化文档 - beego: 简约 & 强大并存的 Go 应用框架https://beego.me/doc ...
- spring boot使用swagger生成api接口文档
前言 在之前的文章中,使用mybatis-plus生成了对应的包,在此基础上,我们针对项目的api接口,添加swagger配置和注解,生成swagger接口文档 具体可以查看本站spring boot ...
- 用Swashbuckle给ASP.NET Core的项目自动生成Swagger的API帮助文档
博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:用Swashbuckle给ASP.NET Core的项目自动生成Swagger的API帮助文档.
- 使用 Swagger 自动生成 ASP.NET Core Web API 的文档、在线帮助测试文档(ASP.NET Core Web API 自动生成文档)
对于开发人员来说,构建一个消费应用程序时去了解各种各样的 API 是一个巨大的挑战.在你的 Web API 项目中使用 Swagger 的 .NET Core 封装 Swashbuckle 可以帮助你 ...
- Spring Boot2配置Swagger2生成API接口文档
一.Swagger2介绍 前后端分离开发模式中,api文档是最好的沟通方式. Swagger 是一个规范和完整的框架,用于生成.描述.调用和可视化 RESTful 风格的 Web 服务. 及时性 (接 ...
- asp.net web api帮助文档的说明
为asp.net的mvc web api填写自己的帮助文档 1. 加入Help的area(能够通过命令行或其它方式加入) 命令行:Install-Package Microsoft.AspNet.We ...
- .NET Core使用swagger进行API接口文档管理
一.问题背景 随着技术的发展,现在的开发模式已经更多的转向了前后端分离的模式,在前后端开发的过程中,联系的方式也变成了API接口,但是目前项目中对于API的管理很多时候还是通过手工编写文档,每次的需求 ...
- swagger:API在线文档自动生成框架
传统的API从开发测试开始我们经常借用类似Postman.fiddle等等去做接口测试等等工具:Swagger 为API的在线测试.在线文档提供了一个新的简便的解决方案: NET 使用Swagger ...
- SpringBoot18 Swagger、API接口文档生成、WireMock、模拟后台数据
1 Swagger 1.1 简述 前后端分离的项目需要前后端开发人员协同工作,后台开发人员需要给到前端开发者一套API文档:利用Swagger可以简单高效的帮助后台开发者生成RestfulAPI开发文 ...
随机推荐
- 8成以上的java线程状态图都画错了,看看这个-图解java并发第二篇
本文作为图解java并发编程的第二篇,前一篇访问地址如下所示: 图解进程线程.互斥锁与信号量-看完还不懂你来打我 图形说明 在开始想写这篇文章之前,我去网上搜索了很多关于线程状态转换的图,我惊讶的发现 ...
- OneDrive 折腾记
起因 百度云的一系列劝退操作 OneDrive 5T 有点香 OneDrive 介绍 OneDrive有两种, 个人版 OneDrive 和 教育企业版 OneDrive for Business 个 ...
- C#中部分重点前端设置问题
背景 在工作及学习过程中经常会遇到一些奇怪的需求,这里便会记录我遇到的奇怪需求及解决方法. 内容 一.动态设置页面标题 1.前端设置 JS代码: document.title="这是一个标题 ...
- leetcode刷题-83删除排序链表中的重复元素
题目 给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次. 示例 1: 输入: 1->1->2 输出: 1->2 实现 # Definition for singly-li ...
- Python中的type(),isinstance,()dir(),的区别
1.type() type(),获取一个变量的类型,返回值为:<class '类名'>,属于class类型2.isinstance() isinstance(),判断一个对象是否属于某种数 ...
- Gradle系列之Android Gradle高级配置
本篇文章主要在之前学习的基础上,从实际开发的角度学习如何对 Android Gradle 来进行自定义以满足不同的开发需求,下面是 Gradle 系列的几篇文章: Gradle系列之初识Gradle ...
- Java Web学习(七)HttpServletResponse(客户端响应)
一.定义 HttpServletResponse对象代表服务端的响应,通过这个对象提供的方法,可以向客户机输出数据. 二.常用方法 在JavaWeb开发中,只要是写URL地址,那么建议最好以" ...
- 在Kubernetes上部署应用时我们常忽略的几件事
根据我的经验,大多数人(使用Helm或手动yaml)将应用程序部署到Kubernetes上,然后认为他们就可以一直稳定运行. 然而并非如此,实际使用过程还是遇到了一些"陷阱",我希 ...
- Centos-网络下载文件-wget
wget 指定URL从网络上下载某个文件,需要网络连接 相关选项 -nc 不覆盖同名文件 -q 安静下载,无输出 -v 显示下载详情 -O 指定保存目录或重命名下载文件名 -c 断点续 ...
- CTFshow_Web入门源码
Web1 题目打开始是这样的 直接看源码 Web2 题目打开是这样的,右键无法打开菜单,无法查看源码,F12也不可以 更改JavaScript权限,即可查看源码 Web3 真就抓个包看看 Web4 访 ...