webapi文档描述Swagger使用

webapi文档描述Swagger使用,第1张

概述      1.创建webapi项目解决方案   2.引用swagger nuget包 3.项目属性生成xml. 4.为了控制器和action 都有注释,我们创建一个Swagger-Custom.js 和SwaggerControllerDescProvider.cs 文件 1 using Swashbuckle.Swagger; 2 using System; 3 using Syst

      1.创建webAPI项目解决方案

  2.引用swagger nuget包

3.项目属性生成xml.

4.为了控制器和action 都有注释,我们创建一个Swagger-Custom.Js 和SwaggerControllerDescProvIDer.cs 文件

 1 using Swashbuckle.Swagger; 2 using System; 3 using System.Collections.Concurrent; 4 using System.Collections.Generic; 5 using System.IO; 6 using System.linq; 7 using System.Web; 8 using System.Xml; 9 10 namespace WMS.Server.App_Start11 {12    /// <summary>13     /// swagger显示控制器的描述14     /// </summary>15     public class SwaggerControllerDescProvIDer : ISwaggerProvIDer16     {17         private Readonly ISwaggerProvIDer _swaggerProvIDer;18         private static ConcurrentDictionary<string,Swaggerdocument> _cache =new ConcurrentDictionary<string,Swaggerdocument>();19         private Readonly string _xml;20         /// <summary>21         /// 22         /// </summary>23         /// <param name="swaggerProvIDer"></param>24         /// <param name="xml">xml文档路径</param>25         public SwaggerControllerDescProvIDer(ISwaggerProvIDer swaggerProvIDer,string xml)26         {27             _swaggerProvIDer = swaggerProvIDer;28             _xml = xml;29         }30 31         public Swaggerdocument GetSwagger(string rootUrl,string APIVersion)32         {33 34             var cacheKey = string.Format("{0}_{1}",rootUrl,APIVersion);35             Swaggerdocument srcDoc = null;36             //只读取一次37             if (!_cache.TryGetValue(cacheKey,out srcDoc))38             {39                 srcDoc = _swaggerProvIDer.GetSwagger(rootUrl,APIVersion);40 41                 srcDoc.vendorExtensions = new Dictionary<string,object> { { "ControllerDesc",GetControllerDesc() } };42                 _cache.TryAdd(cacheKey,srcDoc);43             }44             return srcDoc;45         }46 47         /// <summary>48         /// 从api文档中读取控制器描述49         /// </summary>50         /// <returns>所有控制器描述</returns>51         public  ConcurrentDictionary<string,string> GetControllerDesc()52         {53             string xmlpath = _xml;54             ConcurrentDictionary<string,string> controllerDescDict = new ConcurrentDictionary<string,string>();55             if (file.Exists(xmlpath))56             {57                 Xmldocument xmldoc = new Xmldocument();58                 xmldoc.Load(xmlpath);59                 string type = string.Empty,path = string.Empty,controllername = string.Empty;60 61                 string[] arrPath;62                 int length = -1,cCount = "Controller".Length;63                 XmlNode summaryNode = null;64                 foreach (XmlNode node in xmldoc.SelectNodes("//member"))65                 {66                     type = node.Attributes["name"].Value;67                     if (type.StartsWith("T:"))68                     {69                         //控制器70                         arrPath = type.Split(.);71                         length = arrPath.Length;72                         controllername = arrPath[length - 1];73                         if (controllername.EndsWith("Controller"))74                         {75                             //获取控制器注释76                             summaryNode = node.SelectSingleNode("summary");77                             string key = controllername.Remove(controllername.Length - cCount,cCount);78                             if (summaryNode != null && !string.IsNullOrEmpty(summaryNode.InnerText) && !controllerDescDict.ContainsKey(key))79                             {80                                 controllerDescDict.TryAdd(key,summaryNode.InnerText.Trim());81                             }82                         }83                     }84                 }85             }86             return controllerDescDict;87         }88     }89 }
VIEw Code
///    <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  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();

 

5.打开 SwaggerConfig文件,注入XML.等描述

 public class SwaggerConfig    {        public static voID Register()        {            var thisAssembly = typeof(SwaggerConfig).Assembly;            GlobalConfiguration.Configuration                .EnableSwagger(c =>                    {                                                c.SingleAPIVersion("v1","SwaggerDemo");                         c.IncludeXmlComments(GetXmlCommentsPath());//显示action注释                        //显示控制器注释                      c.CustomProvIDer((defaultProvIDer) => new SwaggerControllerDescProvIDer(defaultProvIDer,GetXmlCommentsPath()));                                            })                .EnableSwaggerUi("doc/{*assetPath}",b => b.InjectJavaScript(Assembly.GetExecutingAssembly(),"SwaggerDemo.Scripts.Swagger-Custom.Js"));//注入自定义的Js文件        }        private static string GetXmlCommentsPath()        {            return System.String.Format(@"{0}bin\SwaggerDemo.XML",System.AppDomain.CurrentDomain.BaseDirectory);        }    }
VIEw Code

 

 6.生成运行报错时:

需要在配置文件设置指定版本7

<runtime>		<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">            <dependentAssembly>          <assemblyIDentity name="Newtonsoft.Json" culture="neutral" publicKeyToken="30ad4fe6b2a6aeed" />          <bindingRedirect oldVersion="0.0.0.0-7.0.0.0" newVersion="7.0.0.0" />        </dependentAssembly>       	</runtime>
总结

以上是内存溢出为你收集整理的webapi文档描述Swagger使用全部内容,希望文章能够帮你解决webapi文档描述Swagger使用所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1051210.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)

保存