.NET webAPI中集成swagger

wqtmelo 2018-02-01 原文

.NET webAPI中集成swagger

 最近做的项目使用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;
            }
        }

  

总结

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

发表于 2018-02-01 16:37 T丶MELO 阅读() 评论() 编辑 收藏

 

版权声明:本文为wqtmelo原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/wqtmelo/p/8399791.html

.NET webAPI中集成swagger的更多相关文章

  1. js中的同步与异步的问题

    前言     近来,总是忙于拿js写一些案例,因为是小白,并没有什么丰富的经验,对各个知识点把握也不是很全面, […]...

  2. Token refresh的实现

    实现原理: 在access_token里加入refresh_token标识,给access_token设置短时 […]...

随机推荐

  1. 登录功能怎么设计测试用例?

    具体需求: 有一个登录页面,有一个账号和一个密码输入框,一个提交按钮。 功能测试 1、输入正确的账号和密码,点 […]...

  2. C#搞跨平台UI,封装Cef作为Cpf的控件支持Windows,Linux,Mac

    终于封装完成了,采用离屏渲染方式,支持JS和C#互相调用,C#方法自动绑定到JS里,中文输入有自动调整输入法位 […]...

  3. MATLAB函数总结——数值运算和符号运算

    系统命令: clear 后可加变量名,也可以加‘-expect c,a’除了a,c,clear all会清除全 […]...

  4. 百度地图自定义标注

     步骤:① 定义构造函数并继承Overlay,通过构造函数参数可以传递一些自由的变量。设置自定义覆盖物对象的p […]...

  5. js导出excel

    js导出excel 总的来说,两种方法:服务器端生成和浏览器端生成。   服务器端生成就是:根据用户请求,获取 […]...

  6. 面试必问:如何实现Redis分布式锁

    摘要:今天我们来聊聊分布式锁这块知识,具体的来看看Redis分布式锁的实现原理。 一、写在前面 现在面试,一般 […]...

  7. SQL like对时间查询的处理方法 – 程序员最后都要送外卖

    SQL like对时间查询的处理方法 SQL数据表中有savetime(smalldatetime类型)字段, […]...

  8. Java I/O不迷茫,一文为你导航!

    前言:在之前的面试中,每每问到关于Java I/O 方面的东西都感觉自己吃了大亏..所以这里抢救一下..来深入 […]...

展开目录

目录导航