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<SwaggerApi>();
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.效果 这里就看不到接口了