• .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}inWebApi.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;
                }
            }
    

      

    总结

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

  • 相关阅读:
    Pandas学习整理与实践
    数据描述性统计整理
    关于购置硬盘的相关注意点
    福大软工 · 最终作业
    福大软工 · 第十二次作业
    Beta冲刺 (7/7)
    Beta冲刺 (6/7)
    深度剖析Vue中父给子、子给父、兄弟之间传值!
    mysql 增删改插
    前端必学TypeScript之第一弹,st基础类型!
  • 原文地址:https://www.cnblogs.com/wqtmelo/p/8399791.html
Copyright © 2020-2023  润新知