第一步:引用程序集

打开NuGet程序包管理器,搜索Swagger,安装第一个,注意画圈的地方,

已经包含主程序和UI了,安装完成后会在根目录App_Start文件夹下生成SwaggerConfig.cs。

第二步:配置信息

打开SwaggerConfig.cs,按照如下配置即可,注意命名空间。

 1 using System.Web.Http;
 2 using WebActivatorEx;
 3 using DemoAPI;
 4 using Swashbuckle.Application;
 5 using Swashbuckle.Swagger;
 6 using System.Collections.Concurrent;
 7 using System.Collections.Generic;
 8 using System.Xml;
 9 using System.IO;
10
11 [assembly: PreApplicationStartMethod(typeof(SwaggerConfig), "Register")]
12
13 namespace DemoAPI
14 {
15     public class SwaggerConfig
16     {
17         public static void Register()
18         {
19             var thisAssembly = typeof(SwaggerConfig).Assembly;
20
21             GlobalConfiguration.Configuration
22                .EnableSwagger(c =>
23                {
24                    c.SingleApiVersion("v1", "DemoAPI");
25                    c.IncludeXmlComments(System.AppDomain.CurrentDomain.BaseDirectory + "/bin/DemoAPI.XML");
26                    c.CustomProvider((defaultProvider) => new CachingSwaggerProvider(defaultProvider));
27                })
28                .EnableSwaggerUi(c =>
29                {
30                    //路径规则:项目命名空间.文件夹名称.js文件名称
31                    c.InjectJavaScript(thisAssembly, "DemoAPI.Scripts.swagger.js");
32                });
33         }
34     }
35
36     public class CachingSwaggerProvider : ISwaggerProvider
37     {
38         private static ConcurrentDictionary<string, SwaggerDocument> _cache =
39                  new ConcurrentDictionary<string, SwaggerDocument>();
40
41         private readonly ISwaggerProvider _swaggerProvider;
42
43         public CachingSwaggerProvider(ISwaggerProvider swaggerProvider)
44         {
45             _swaggerProvider = swaggerProvider;
46         }
47
48         public SwaggerDocument GetSwagger(string rootUrl, string apiVersion)
49         {
50             var cacheKey = string.Format("{0}_{1}", rootUrl, apiVersion);
51             SwaggerDocument srcDoc = null;
52             //只读取一次
53             if (!_cache.TryGetValue(cacheKey, out srcDoc))
54             {
55                 srcDoc = _swaggerProvider.GetSwagger(rootUrl, apiVersion);
56
57                 srcDoc.vendorExtensions = new Dictionary<string, object> { { "ControllerDesc", GetControllerDesc() } };
58                 _cache.TryAdd(cacheKey, srcDoc);
59             }
60             return srcDoc;
61         }
62
63         /// <summary>
64         /// 从API文档中读取控制器描述
65         /// </summary>
66         /// <returns>所有控制器描述</returns>
67         public static ConcurrentDictionary<string, string> GetControllerDesc()
68         {
69             string xmlpath = string.Format("{0}/bin/DemoAPI.XML", System.AppDomain.CurrentDomain.BaseDirectory);
70             ConcurrentDictionary<string, string> dic = new ConcurrentDictionary<string, string>();
71             if (!File.Exists(xmlpath))
72             {
73                 return dic;
74             }
75             XmlDocument doc = new XmlDocument();
76             doc.Load(xmlpath);
77             XmlNodeList list = doc.SelectNodes("//member[contains(@name,'T:')]");
78             foreach (XmlNode item in list)
79             {
80                 string val = item.Attributes["name"].Value;
81                 string key = val.Substring(val.LastIndexOf('.') + 1).Replace("Controller", "");
82                 XmlNode node = item.FirstChild;
83                 if (!dic.ContainsKey(key))
84                 {
85                     dic.TryAdd(key, node.InnerText.Trim());
86                 }
87             }
88             return dic;
89         }
90
91     }
92 }

View Code

第三步:输出XML文件

右键项目的属性,生成,勾选

第四步:显示控制器备注

第二步中的,EnableSwaggerUi()配置的swagger.js代码如下

$(function () {var init = function () {$.getJSON($("#input_baseUrl").val(), {}, function (res) {$("#resources_container .resource").each(function (i, item) {var _id = $(item).attr("id");if (!_id) { return; }var strSummary = res.ControllerDesc[_id.substring(9)];if (strSummary){$(item).children(".heading").children(".options").prepend('<li style="color:#000">' + strSummary + '</li>');}});});};init();
});

自己加的作用于swagger的资源文件(如js、css等文件),

需要设置,否则会报错;选中文件,右键属性,生成操作改为嵌入的资源。

访问地址为 域名或IP+/swagger/ui/index,界面如下:

想要显示action,就要在action上面打上特性标签:

或者修改WebApiConfig.cs中routeTemplate选项的值:

汉化就不需要了,备注是中文就行,也没几个单词。

转载于:https://www.cnblogs.com/shousiji/p/7095150.html

API文档自动生成,Swagger的配置相关推荐

  1. Java api文档自动生成工具smartdoc+torna

    首先,一般做java服务端都用过postman,并且都写过前端调用的api文档接口,并且也用过市面上的一些工具. API自文档动生成,能够省去了写文档的时间. 当然,当前也会有很多类似的开源工具,我们 ...

  2. API文档自动生成的方法

    编写API文档是API编写人员的噩梦,而API文档通常是由API研发人员编写.由于API文档创建繁琐,需要记录的内容比较广,结束了API开发任务后,还要仔细编写API文档,给研发人员带来额外的工作量. ...

  3. 使用swagger实现在线api文档自动生成 在线测试api接口

    使用vs nuget包管理工具搜索Swashbuckle 然后安装便可 注释依赖于vs生成的xml注释文件 转载于:https://www.cnblogs.com/ProDoctor/p/752607 ...

  4. Java支持latex,基于Java和LaTeX的文档自动生成技术研究

    基于Java和 LaTeX 的文档 自动生成技术研究 ◆尚宝欣 徐 屹 (东北电力大学理学院,吉林 长春 132012) [摘 要]讨论了结合Java与LaTex 自动生成 PDF文档的方法.针 展名 ...

  5. Word 2010文档自动生成目录和某页插入页码

    一.Word 2010文档自动生成目录 关于Word文档自动生成目录一直是我身边同学们最为难的地方,尤其是毕业论文,经常因为目录问题,被要求修改,而且每次修改完正文后,目录的内容和页码可能都会发生变化 ...

  6. Spring Boot 2.x基础教程:Swagger静态API文档的生成

    点击蓝色"程序猿DD"关注我 回复"资源"获取独家整理的学习资料! 作者 | 翟永超 来源 | didispace.com/spring-boot-learni ...

  7. swagger api文档_带有Swagger的Spring Rest API –创建文档

    swagger api文档 使REST API易于使用的真正关键是好的文档. 但是,即使您的文档做得很好,您也需要设置公司流程的权利以正确,及时地发布它. 确保利益相关者按时收到是一回事,但是您也要负 ...

  8. SpringBoot2.x整合Swagger2 实现API文档实时生成

    我们提供Restful接口的时候,API文档是尤为的重要,它承载着对接口的定义,描述等,本文主要介绍了SpringBoot集成Swagger2生成接口文档的方法示例,需要的朋友们下面随着小编来一起学习 ...

  9. 开发工具合集专题《管理工具,DoxygenAPI文档自动生成》

    Doxygen是一种开源跨平台的,以类似JavaDoc风格描述的文档系统,完全支持C.C++.Java.Objective-C和IDL语言,部分支持PHP.C#.注释的语法与Qt-Doc.KDoc和J ...

  10. swagger api文档_带有Swagger的Spring Rest API –公开文档

    swagger api文档 创建API文档后,将其提供给涉众很重要. 在理想情况下,此发布的文档将足够灵活以解决任何最后的更改,并且易于分发(就成本以及完成此操作所需的时间而言). 为了使之成为可能, ...

最新文章

  1. Web API--自定义异常结果的处理
  2. php 16进制转换utf-8,php对unicode转utf-8编码
  3. SpringBoot 全局异常处理
  4. ant design样式不生效官方解决方案
  5. 下载丨OGG实战项目总结
  6. 无连接可靠传输_FPC连接器的特点以及弹片微针模组的作用
  7. 死锁的充分必要条件、死锁预防、死锁避免、死锁检测和解除
  8. win32开发(调试)
  9. python request timeout_详解Python requests 超时和重试的方法
  10. poj 2516(最小费用最大流)
  11. Javascript特效:缓动动画
  12. 1546: 回形取数
  13. How to Build the Confidence Habit,7 Ways To Start To Value Yourself,Becoming More Me Through Meditat
  14. c语言编译器苹果下载,c语言编译器ios下载
  15. Linux基础(三)
  16. 业余设计不求人,30秒AI快速制作LOGO
  17. Facebook如何管理150亿张照片
  18. raid卡的读写策略
  19. 米老师解惑----1
  20. 常用缓存读写策略(cache读写策略)

热门文章

  1. presto查询报错
  2. Spark sql数据倾斜优化的一个演示案例
  3. RDD 常见Action算子入门及应用
  4. centos7---mysql5.7主从复制读写分离
  5. 删除链表中重复的节点
  6. MySQL 性能优化的19个要点
  7. elasticsearch2.x优化小结(单节点)
  8. 国内maven镜像,快的飞起
  9. WEB自动化(Python+selenium)的API
  10. WCF分布式开发常见错误解决(1):添加服务引用出错