zoukankan      html  css  js  c++  java
  • 很好用的API管理--Swagger

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

    搞定

  • 相关阅读:
    B 基因改造
    A 密码锁
    Leetcode(884)-索引处的解码字符串
    Leetcode(885)- 救生艇
    Leetcode(23)-合并K个排序链表
    关于优先队列的总结II
    重载运算符问题
    Leetcode(22)-括号生成
    Leetcode(102)-二叉树的层次遍历
    Leetcode(82)-删除排序链表中的重复元素 II
  • 原文地址:https://www.cnblogs.com/dongh/p/7690634.html
Copyright © 2011-2022 走看看