zoukankan      html  css  js  c++  java
  • Swagger 隐藏具体API

    一、why

      在swagger ui界面中有时候不想显示某些api,通过下面的方式可以实现。

      1.1、新建一个类实现IDocumentFilter接口
    using Swashbuckle.Swagger;
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.Http.Description;
    
    namespace InvoiceApi.InvoiceHelper
    {
        /// <summary>  
        /// 隐藏接口,不生成到swagger文档展示  
        /// </summary>  
        [System.AttributeUsage(System.AttributeTargets.Method | System.AttributeTargets.Class)]
        public partial class HiddenApiAttribute : System.Attribute { }
        public class HiddenApiFilter : IDocumentFilter
        {
    
            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);
                    }
                }
            }
        }
    }
    
      1.2、在SwaggerConfig修改配置

      1.3、在想隐藏的api上面添加特性 [HiddenApi]
    using InvoiceApi.InvoiceHelper;
    using System;
    using System.Collections.Generic;
    using System.IO;
    using System.Linq;
    using System.Net;
    using System.Net.Http;
    using System.Net.Http.Headers;
    using System.Web.Http;
    
    namespace InvoiceApi.Controllers
    {
    
        public class DownController : ApiController
        {
            /// <summary>
            /// 下载api参数文档
            /// </summary>
            /// <returns></returns>
            [HttpGet]
            [HiddenApi]
    
            public HttpResponseMessage DownloadDoc()
            {
                try
                {
                    var FilePath = System.Web.Hosting.HostingEnvironment.MapPath(@"~/Doc/api参数说明.docx");
                    var stream = new FileStream(FilePath, FileMode.Open);
                    HttpResponseMessage response = new HttpResponseMessage(HttpStatusCode.OK);
                    response.Content = new StreamContent(stream);
                    response.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
                    response.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment")
                    {
                        FileName = "纸质发票参数API文档.doc",
    
                    };
                    return response;
                }
                catch
                {
                    return new HttpResponseMessage(HttpStatusCode.NoContent);
                }
            }
    
        }
    }
    

      

  • 相关阅读:
    IOS开发-cell的动态高度
    IOS开发-视频,音频,录音简单总结
    cocoapods的安装及注意事项
    CUICatalog: Invalid asset name supplied: (null) _configureCellForDisplay:forIndexPath
    IOS开发—数据库的使用
    IOS开发-键盘通知自定义键盘
    IOS开发-手势简单使用及手势不响应处理办法
    IOS开发-UITextField代理常用的方法总结
    Linux Shell 编程学习笔记
    Java的进程内缓存框架:EhCache
  • 原文地址:https://www.cnblogs.com/WangJunZzz/p/8316587.html
Copyright © 2011-2022 走看看