很好用的API管理--Sawgger

Posted 打你的小熊

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了很好用的API管理--Sawgger相关的知识,希望对你有一定的参考价值。

 

1.打开NuGet程序包

2.安装下面两个程序包

 

3.安装完后会出现SwaggerConfig.cs类,并修改里面的内容

代码:

[assembly: PreApplicationStartMethod(typeof(SwaggerConfig), "Register")]

namespace WebApplication1
{
    public class SwaggerConfig
    {
        public static void Register()
        {
            var thisAssembly = typeof(SwaggerConfig).Assembly;

            GlobalConfiguration.Configuration
                .EnableSwagger(c =>
                {
                    c.SingleApiVersion("v1", "WebApp");

             c.IncludeXmlComments(GetXmlCommentsPath());

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

 

4.添加WebApi.cs类

代码:

namespace WebApi
{
    public static class WebApiConfig
    {
        public static void Register(HttpConfiguration config)
        {
            // Web API configuration and services

            // Web API routes
            config.MapHttpAttributeRoutes();

            config.Routes.MapHttpRoute(
                name: "DefaultApi1",
                routeTemplate: "api/{controller}/{action}/{id}",
                defaults: new { id = RouteParameter.Optional }
            );

            config.Routes.MapHttpRoute(
               name: "DefaultApi2",
               routeTemplate: "api/{controller}/{action}/{id}",
               defaults: new { action="get",id = RouteParameter.Optional }
           );
        }
    }
}

 

5.修改Global.asax类

代码:

public class MvcApplication : System.Web.HttpApplication
    {
        protected void Application_Start()
        {
            AreaRegistration.RegisterAllAreas();
            RouteConfig.RegisterRoutes(RouteTable.Routes);
            GlobalConfiguration.Configure(WebApiConfig.Register);   //这是要加的
        }
    }

 

6.设置需要调试的类

7.设置生成的XML文档

8.运行项目,打开浏览器输入http://localhost:23092/swagger/

结果展示:

 

 

注意:

在使用Swagger WebApi文档框架时,一个Controll中写多个Post接口时,在MVC4中会提示无法识别的多个post请求,原因是WebApiConfig中默认路由配置中是没有配置{action}引起的。

【在MVC5中没有此问题,原因是MVC5有Route[" "]特性,MVC4中不支持】

 

解决方案:

方法1:修改WebApiConfig文件

//默认配置  
           config.Routes.MapHttpRoute(  
               name: "DefaultApi",  
               routeTemplate: "api/{controller}/{id}",  
               defaults: new { id = RouteParameter.Optional }  
           );  
           //修改后配置  
           config.Routes.MapHttpRoute(  
               name: "DefaultApi",  
               routeTemplate: "api/{controller}/{action}/{id}",  
               defaults: new { id = RouteParameter.Optional }  
           );

方法2:MVC5中可以不修改默认配置文件,而使用Route特性来指定

/// <summary>
        /// POST请求1
        /// 
        ///api/Member
        /// </summary>
        /// <param name="value"></param>
        public void Post([FromBody]string value)
        {
 
        }
 
        /// <summary>
        /// POST请求2
        /// api/Member/Login
        /// </summary>
        /// <param name="loginId"></param>
        /// <param name="password"></param>
        /// <returns></returns>
        [HttpPost, Route("api/Member/Login")]
        public string Login([FromBody]string loginId, [FromBody]string password)
        {
            return "";
        }

 

附带:隐藏接口

在使用Swagger需要隐藏不开放的API 
可以在SwaggerConfig.cs中加入

  /// <summary>  
        /// 隐藏接口,不生成到swagger文档展示  
        /// </summary>  
        [System.AttributeUsage(System.AttributeTargets.Method | System.AttributeTargets.Class)]

        public partial class HiddenApiAttribute : System.Attribute { }
        public class HiddenApiFilter : IDocumentFilter
        {
            /// <summary>  
            /// 重写Apply方法,移除隐藏接口的生成  
            /// </summary>  
            /// <param name="swaggerDoc">swagger文档文件</param>  
            /// <param name="schemaRegistry"></param>  
            /// <param name="apiExplorer">api接口集合</param>  
            public void Apply(SwaggerDocument swaggerDoc, SchemaRegistry schemaRegistry, IApiExplorer apiExplorer)
            {
                foreach (ApiDescription apiDescription in apiExplorer.ApiDescriptions)
                {
                    if (Enumerable.OfType<HiddenApiAttribute>(apiDescription.GetControllerAndActionAttributes<HiddenApiAttribute>()).Any())
                    {
                        string key = "/" + apiDescription.RelativePath;
                        if (key.Contains("?"))
                        {
                            int idx = key.IndexOf("?", System.StringComparison.Ordinal);
                            key = key.Substring(0, idx);
                        }
                        swaggerDoc.paths.Remove(key);
                    }
                }
            }
        }

并且在SwaggerConfig.cs 中加入  

 c.DocumentFilter<HiddenApiFilter>();

搞定

 

以上是关于很好用的API管理--Sawgger的主要内容,如果未能解决你的问题,请参考以下文章

开发者API管理神器Eolink,比postman好用

开发者 API 管理神器 Eolink,比 postman 好用

Flask 编写http接口api及接口自动化测试

#VSCode保存插件配置并使用 gist 管理代码片段

片段管理访问错误可见 return false

YApi——好用的接口管理工具