c# swagger 笔记二

来源:互联网 发布:君权级战列舰知乎 编辑:程序博客网 时间:2024/06/06 02:38

1.添加接口注释



效果图:




2.汉化步骤

第一步:添加js文件  这里注意的是生成操作这里必须是嵌入的资源



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();

第二步: 在SwaggerConfig.cs 类中添加 一个类CachingSwaggerProvider


CachingSwaggerProvider 类中的内容

  public class CachingSwaggerProvider : ISwaggerProvider    {        private static ConcurrentDictionary<string, SwaggerDocument> _cache =            new ConcurrentDictionary<string, SwaggerDocument>();        private readonly ISwaggerProvider _swaggerProvider;        public CachingSwaggerProvider(ISwaggerProvider swaggerProvider)        {            _swaggerProvider = swaggerProvider;        }        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 static ConcurrentDictionary<string, string> GetControllerDesc()        {            string xmlpath = string.Format("{0}/bin/SwaggerDemo.XML", System.AppDomain.CurrentDomain.BaseDirectory);            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.cs 类中打开

 c.CustomProvider((defaultProvider) => new CachingSwaggerProvider(defaultProvider));

 c.InjectJavaScript(thisAssembly, "MvcApplication1.Scripts.JavaScript1.js"); //js文件路径


汉化步奏就全部ok !!

效果图



下载代码:点击下载代码


原创粉丝点击