码迷,mamicode.com
首页 > Windows程序 > 详细

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

时间:2017-06-29 17:28:46      阅读:1890      评论:0      收藏:0      [点我收藏+]

标签:nbsp   gis   names   private   this   asc   sts   ima   root   

第一步:引用程序集

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

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

技术分享

 

 

第二步:配置信息

按照如下配置即可,注意命名空间。

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

 

 

第三步:输出XML文件

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

技术分享

 

 

 第四步:显示控制器备注

自己建一个js文件,然后在SwaggerConfig.cs中加入,如上面代码中的

c.InjectJavaScript(thisAssembly, "Demo.API.Scripts.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();
});

 

自己加的js、css等文件啊,需要设置,否则会报错

选中文件,右键属性,生成操作改为嵌入的资源。

技术分享

 

 

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

访问地址为 域名或IP+/swagger/ui/index

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

标签:nbsp   gis   names   private   this   asc   sts   ima   root   

原文地址:http://www.cnblogs.com/shousiji/p/7095150.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!