使用Swagger处理Api的显示与隐藏

Posted evasunny

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用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的文档中是不显示的

以上是关于使用Swagger处理Api的显示与隐藏的主要内容,如果未能解决你的问题,请参考以下文章

Sphinx、reStructuredText 显示/隐藏代码片段

从 Swagger URL 隐藏“index.html”

使用删除与隐藏时未调用自定义动画

Swagger + Spring security - 基于角色隐藏方法

swagger注解详解

csharp 在Swashbuckle Swagger中,此片段允许按字母顺序显示操作。