博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
.NET webAPI中集成swagger
阅读量:4344 次
发布时间:2019-06-07

本文共 2920 字,大约阅读时间需要 9 分钟。

 最近做的项目使用winform三层+webapi,对于webAPI路由文档管理一直觉得单独做一些管理比较麻烦,并且测试的时候项目内的代码测试运行起来也比较麻烦,所以在网上开始检索相关办法,发现热度比较高的两种:

1.微软 HelpPage   2.swagger

      第二种方案虽然官网文档比较难找,但是有很多实例,所以开始研究第二种,给大家看看效果:

API控制器总览

action和描述

直观的接口测试

 

使用swagger

  1.创建webapi项目解决方案

  2.引用swagger nuget包

  Swashbuckle、Swagger.Net.UI(如果不需要调整在线测试页面可以不添加)两个包

  3.卸载重复包Swagger.Net

  引用Swagger.Net.UI时会引用Swagger.Net这个包,但是Swagger.Net的功能和Swashbuckle重复了。所以我采取了卸载Swagger.Net

 

 4.添加接口注释

完成上面三部运行项目,可以看到接口描述已经生成,浏览地址http://xxx/Swagger。但是没有接口的注释,下面添加接口注释

 项目属性->勾选生成xml文档文件

修改SwaggerConfig文件

private static string GetXmlCommentsPath()        {           return System.String.Format(@"{0}\bin\WebApi.XML", System.AppDomain.CurrentDomain.BaseDirectory);        }

 以上两者必须保持一致

winform通过Swagger生成的本地XML读取路由

1.在action注释的地方加上路径

2.把webAPI项目内生成的XML文档拷贝到winform项目的基路径

3.XML读取action路径方法:

///         /// WebAPI路由方法文件        ///         public static string Path        {            get {                string _path = AppDomain.CurrentDomain.BaseDirectory + "WebAPI.xml";                return _path;                }        }        ///         /// 查询XML节点        ///         ///         /// 
public static CONFIG_FUNCTION ReadNodeXML(string functionname) { try { string controllerName; CONFIG_FUNCTION model = new CONFIG_FUNCTION(); XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load(Path); XmlNodeList nodeList1 = xmlDoc.SelectSingleNode("doc").ChildNodes;//获取Controllers节点的所有子节点 members XmlNodeList nodeList = nodeList1[1].SelectNodes("member"); foreach (XmlNode xn in nodeList)//遍历所有子节点 { XmlElement xe = (XmlElement)xn;//将子节点类型转换为XmlElement类型 string name= xe.GetAttribute("name").ToString(); if (name.Contains("Controller.") && name.Contains("(")) { controllerName = name.Substring(name.IndexOf("Controller.") + 11, (name.IndexOf("(") - name.IndexOf("Controller.") - 11)); if (controllerName == functionname) { model.FUNCTIONNAME = controllerName; XmlNodeList nls = xe.ChildNodes;//继续获取xe子节点的所有子节点 foreach (XmlNode xn1 in nls)//遍历 { XmlElement xe2 = (XmlElement)xn1;//转换类型 if (xe2.Name == "url")//如果找到 model.FUNCTIONPATH = xe2.InnerText; } } } } return model; } catch (Exception ex) { throw ex; } }

  

总结

  有了这么方便的接口描述文档和接口测试工具,让前后端分离开发更加方便了,测试也可以不依赖于界面单独测试接口。

转载于:https://www.cnblogs.com/wqtmelo/p/8399791.html

你可能感兴趣的文章
Python中and(逻辑与)计算法则
查看>>
POJ 3267 The Cow Lexicon(动态规划)
查看>>
设计原理+设计模式
查看>>
tomcat 7服务器跨域问题解决
查看>>
前台实现ajax 需注意的地方
查看>>
Jenkins安装配置
查看>>
个人工作总结05(第二阶段)
查看>>
深入理解Java虚拟机&运行时数据区
查看>>
02-环境搭建
查看>>
spring第二冲刺阶段第七天
查看>>
搜索框键盘抬起事件2
查看>>
阿里百川SDK初始化失败 错误码是203
查看>>
透析Java本质-谁创建了对象,this是什么
查看>>
BFS和DFS的java实现
查看>>
关于jquery中prev()和next()的用法
查看>>
一、 kettle开发、上线常见问题以及防错规范步骤
查看>>
eclipse没有server选项
查看>>
CRC码计算及校验原理的最通俗诠释
查看>>
使用Gitbook来编写你的Api文档
查看>>
jquery扩展 $.fn
查看>>