using Microsoft.AspNetCore.Mvc.ApiExplorer;
using System.ComponentModel;
namespace OASystem.API
{
public class SwaggerApi : IDocumentFilter
{
[AttributeUsage(AttributeTargets.Method | AttributeTargets.Class)]
public class HideApiAttribute : System.Attribute { }
public void Apply(OpenApiDocument swaggerDoc, DocumentFilterContext context)
{
foreach (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);
}
}
}
}
}
}