HTML5技术

webapi文档描述-swagger - 焰尾迭(2)

字号+ 作者:H5之家 来源:H5之家 2016-08-04 13:00 我要评论( )

public class CachingSwaggerProvider : ISwaggerProvider{ private static ConcurrentDictionary string , SwaggerDocument _cache = new ConcurrentDictionary string , SwaggerDocument (); private readonly IS

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) { , rootUrl, apiVersion); SwaggerDocument srcDoc = null; (!_cache.TryGetValue(cacheKey, out srcDoc)) { srcDoc = _swaggerProvider.GetSwagger(rootUrl, apiVersion); srcDoc.vendorExtensions = , GetControllerDesc() } }; _cache.TryAdd(cacheKey, srcDoc); } return srcDoc; } 从API文档中读取控制器描述 ConcurrentDictionary<string, string> GetControllerDesc() { , 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; .Length; XmlNode summaryNode = null; )) { type = node.Attributes[].Value; )) { //控制器 arrPath = type.Split(); length = arrPath.Length; controllerName = arrPath[length - 1]; )) { //获取控制器注释 summaryNode = node.SelectSingleNode(); 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; } }

View Code

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

上面汉化的js中的方法_setControllerSummary通过读取ControllerDesc属性设置了控制器的描述,至此项目可以无忧使用接口描述文档。

3.使用了MEF导致接口重复问题解决方案

代码请参照项目中的SwaggerConfig_解决MEF重复问题.cs文件

ApiExplorer思路拓展

该篇到这里可以结束了,考虑到有的读者想了解更多Swagger的实现内幕,这里再做一下简单的思路引导。

Swagger的读取所有Controller和Action借助于IApiExplorer接口的方法GetApiExplorer,其中IApiExplorer在System.Web.Http中。

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • ABP入门系列(16)——通过webapi与系统进行交互 - 『圣杰』

    ABP入门系列(16)——通过webapi与系统进行交互 - 『圣杰』

    2017-04-25 09:04

  • 微服务--webapi实现,脱离iis,脱离tomcat - 失足程序员

    微服务--webapi实现,脱离iis,脱离tomcat - 失足程序员

    2017-03-30 11:00

  • 没有功能需求设计文档?对不起,拒绝开发! - CharlieChu

    没有功能需求设计文档?对不起,拒绝开发! - CharlieChu

    2017-03-16 13:04

  • HTML5的文档结构 - 不报错才可怕

    HTML5的文档结构 - 不报错才可怕

    2017-01-14 12:00

网友点评
"