1.写一个隐藏接口特性表示
- using Microsoft.AspNetCore.Mvc.ApiExplorer;
- using Microsoft.OpenApi.Models;
- using Swashbuckle.AspNetCore.SwaggerGen;
-
- using System.Web.Http.Description;
-
- namespace JiaTongInterface.Filter
- {
- public class SwaggerApi : Swashbuckle.AspNetCore.SwaggerGen.IDocumentFilter
- {
- /// <summary>
- /// 隐藏swagger接口特性标识
- /// </summary>
- [AttributeUsage(AttributeTargets.Method | AttributeTargets.Class)]
- public class HideApiAttribute : System.Attribute
- {
- }
-
-
- public void Apply(OpenApiDocument swaggerDoc, DocumentFilterContext context)
- {
- foreach (Microsoft.AspNetCore.Mvc.ApiExplorer.ApiDescription description in context.ApiDescriptions)
- {
- if (description.TryGetMethodInfo(out MethodInfo method))
- {
- if (method.ReflectedType.CustomAttributes.Any(t => t.AttributeType == typeof(HideApiAttribute))
- || method.CustomAttributes.Any(t => t.AttributeType == typeof(HideApiAttribute)))
- {
- string key = "/" + description.RelativePath;
- if (key.Contains("?"))
- {
- int idx = key.IndexOf("?", System.StringComparison.Ordinal);
- key = key.Substring(0, idx);
- }
- swaggerDoc.Paths.Remove(key);
- }
- }
- }
- }
- }
-
- }
2.在porgram.cs中加入option.DocumentFilter
- builder.Services.AddSwaggerGen(option =>
- {
- var xmlFilename = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml";
- option.IncludeXmlComments(Path.Combine(AppContext.BaseDirectory, xmlFilename), true);
- option.DocumentFilter<SwaggerApi>();
- });
3.使用方法,在controlller前加入[SwaggerApi.HideApi]即可实现隐藏

4.效果 这里就看不到接口了
