使用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的文档中是不显示的

转载于:https://www.cnblogs.com/evasunny/p/10051953.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值