最近做的项目使用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路径方法:

        /// <summary>
/// WebAPI路由方法文件
/// </summary>
public static string Path
{
get {
string _path = AppDomain.CurrentDomain.BaseDirectory + "WebAPI.xml";
return _path;
}
} /// <summary>
/// 查询XML节点
/// </summary>
/// <param name="functionname"></param>
/// <returns></returns>
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;
}
}

  

总结

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

最新文章

  1. Java的学习之路
  2. 一些有用的configue参数
  3. jqgrid 中的事件
  4. 常用免费的WebService列表
  5. Leetcode 134 Gas Station
  6. Selenium2Library系列 keywords 之 _SelectElementKeywords 之 select_from_list(self, locator, *items)
  7. JAVA反射学习网摘
  8. linux中ctrl+z、ctrl+d和ctrl+c的区别
  9. 第十二章——SQLServer统计信息(1)——创建和更新统计信息
  10. iosOC不可变数组遍历
  11. xlwt 格式控制
  12. BootStrap基礎知識
  13. Docker技术原理
  14. #define中的“#”和“##”的作用
  15. IPUtils 工具类
  16. Docker 镜像的制作和使用
  17. Python3.6全栈开发实例[001]
  18. 按时按登录IP记录Linux所有用户操作日志的方法(附脚本)
  19. 兔子--html,js,php,ASP,ASP.NET,JSP的关系
  20. 动态区间第K大

热门文章

  1. idea 环境变量设置编码
  2. Redis 搭建一主二从三哨兵高可用集群
  3. java通过代理创建Conncection对象与自定义JDBC连接池
  4. aircrack-ng wifi密码破解
  5. [LeetCode] 824. Goat Latin
  6. Java 学习笔记之 线程脏读
  7. sbt 学习笔记(1)sbt安装和交互式界面使用
  8. 【Java】登录验证码
  9. mac下安装jmeter
  10. MySQL基础(五)常见运算符