Swagger 增加 DocumentFilter 隐藏不需要显示的接口

Posted FreeSql & CSRedis

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Swagger 增加 DocumentFilter 隐藏不需要显示的接口相关的知识,希望对你有一定的参考价值。

services.ConfigureSwaggerGen(options => {
	options.SingleApiVersion(new Info {
		Version = "v1",
		Title = "xxx API",
		Description = "xxx 项目webapi接口说明",
		TermsOfService = "None",
		Contact = new Contact { Name = "xxx", Email = "", Url = "http://xxx.com" },
		License = new License { Name = "xxx", Url = "http://xxx.com" }
	});
	options.IncludeXmlComments(AppContext.BaseDirectory + @"/Admin.xml"); // 这个需要开启项目生成 xml 选项
	options.DocumentFilter<HiddenApiFilter>();
	// 在接口类、方法标记属性 [HiddenApi],可以阻止【Swagger文档】生成
});
HiddenApiFilter.cs 代码实现部分

[AttributeUsage(AttributeTargets.Method | AttributeTargets.Class)]
public partial class HiddenApiAttribute : Attribute { }
public class HiddenApiFilter : IDocumentFilter {
	public void Apply(SwaggerDocument swaggerDoc, DocumentFilterContext context) {
		foreach (ApiDescription apiDescription in context.ApiDescriptionsGroups.Items.SelectMany(e => e.Items)) {
			if (apiDescription.GetControllerAttributes().OfType<HiddenApiAttribute>().Count() == 0 
				&& apiDescription.GetActionAttributes().OfType<HiddenApiAttribute>().Count() == 0) continue;

			var key = "/" + apiDescription.RelativePath.TrimEnd(‘/‘);
			if (!key.Contains("/test/") && swaggerDoc.Paths.ContainsKey(key))
				swaggerDoc.Paths.Remove(key);
		}
	}
}

 

以上是关于Swagger 增加 DocumentFilter 隐藏不需要显示的接口的主要内容,如果未能解决你的问题,请参考以下文章

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

WebAPI纯净版中增加Swagger

(转) 增加 header 参数,spring boot + swagger2(springfox)

Swagger ui在zuul后面的时候在测试页面增加了一个/path

SpringBoot集成Swagger,Postman,newman,jenkins自动化测试.

SpringBoot项目中使用swagger2暴露resftul接口增加JWT来进行安全性验证