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

2021-06-28 07:05

阅读:508

标签:pie   desc   rem   get   rand   any   oftype   agg   filter   

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

c.DocumentFilter();
c.DocumentFilter();

 

二、新建类,分别处理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(apiDescription.GetControllerAndActionAttributes()).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(apiDescription.GetControllerAndActionAttributes()).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的显示与隐藏

标签:pie   desc   rem   get   rand   any   oftype   agg   filter   

原文地址:https://www.cnblogs.com/evasunny/p/10051953.html


评论


亲,登录后才可以留言!