API文档自动生成,Swagger的配置

Posted 水沽籽

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了API文档自动生成,Swagger的配置相关的知识,希望对你有一定的参考价值。

ASP.NET的部署方式

第一步:引用程序集

打开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:port/swagger/ui/index,界面如下:

 

 

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

 

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

 

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

 

=============================================================================

 

ASP.NET Core的部署方式

出自:https://github.com/domaindrivendev/Swashbuckle.AspNetCore

 

第一步:NuGet中搜索“Swashbuckle.AspNetCore”。

 

第二步:Startup.cs的配置。

1.引入命名空间“using Swashbuckle.AspNetCore.Swagger;”

2.ConfigureServices方法中加入:

services.AddSwaggerGen(c =>
{
    c.SwaggerDoc("v1", new Info { Title = "My API", Version = "v1" });
});

3.Configure方法中加入:

app.UseSwagger();
app.UseSwaggerUI(c =>
{
    c.SwaggerEndpoint("/swagger/v1/swagger.json", "My API V1");
});

 

生成重启,访问地址为 域名或 ip:port/swagger/index.html

 

以上是关于API文档自动生成,Swagger的配置的主要内容,如果未能解决你的问题,请参考以下文章

API文档自动生成,Swagger的配置

SpringBoot2基于Swagger2生成离线Api文档

使用springfox+swagger2书写API文档(十八)

swagger自动生成API文档

swagger自动生成API文档

使用go-swagger为golang API自动生成swagger文档