zoukankan      html  css  js  c++  java
  • 使用Swagger处理Api的显示与隐藏

    一、在SwaggerConfig.cs中配置如下:

    c.DocumentFilter<ShowApiFilter>();
    c.DocumentFilter<HideApiFilter>();

    二、新建类,分别处理Show与Hide

    public class ShowApiAttribute : Attribute { }
    public class ShowApiFilter : IDocumentFilter
    {
    	public void Apply(SwaggerDocument swaggerDoc, SchemaRegistry schemaRegistry, IApiExplorer apiExplorer)
    	{
    		foreach (ApiDescription apiDescription in apiExplorer.ApiDescriptions)
    		{
    			if (!Enumerable.OfType<ShowApiAttribute>(apiDescription.GetControllerAndActionAttributes<ShowApiAttribute>()).Any())
    			{
    				string key = "/" + apiDescription.RelativePath;
    				if (key.Contains("?"))
    				{
    					int idx = key.IndexOf("?", StringComparison.Ordinal);
    					key = key.Substring(0, idx);
    				}
    				swaggerDoc.paths.Remove(key);
    			}
    		}
    	}
    }
    

      

    public class HideApiAttribute : Attribute { }
    public class HideApiFilter : IDocumentFilter
    {
    	public void Apply(SwaggerDocument swaggerDoc, SchemaRegistry schemaRegistry, IApiExplorer apiExplorer)
    	{
    		foreach (ApiDescription apiDescription in apiExplorer.ApiDescriptions)
    		{
    			if (Enumerable.OfType<HideApiAttribute>(apiDescription.GetControllerAndActionAttributes<HideApiAttribute>()).Any())
    			{
    				string key = "/" + apiDescription.RelativePath;
    				if (key.Contains("?"))
    				{
    					int idx = key.IndexOf("?", StringComparison.Ordinal);
    					key = key.Substring(0, idx);
    				}
    				swaggerDoc.paths.Remove(key);
    			}
    		}
    	}
    }
    

    三、在使用时,直接在Controller上或Action上加上相应的特性即可,注意,如果上面的代码都放在了项目中,即把显示与隐藏都配置到了Swagger中,则在不加特性时,Swagger的文档中是不显示的

  • 相关阅读:
    usaco-ariprog1-pass
    usaco-crypt1-pass
    usaco-barn-repair-pass-KISS
    usaco-mixing milk-pass
    面试HR
    LCS求最长公共子序列(DP)
    毕业随想(转载)
    0-1背包问题(DP)
    排序算法
    二叉搜索树的实现 java
  • 原文地址:https://www.cnblogs.com/evasunny/p/10051953.html
Copyright © 2011-2022 走看看