You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
42 lines
1.4 KiB
42 lines
1.4 KiB
2 years ago
|
using Microsoft.AspNetCore.Mvc.ApiExplorer;
|
||
|
using Microsoft.OpenApi.Models;
|
||
|
using Swashbuckle.AspNetCore.SwaggerGen;
|
||
|
using System;
|
||
|
using System.Collections.Generic;
|
||
|
using System.Linq;
|
||
|
using System.Reflection;
|
||
|
using System.Text;
|
||
|
using System.Threading.Tasks;
|
||
|
|
||
|
namespace Elight.Utility
|
||
|
{
|
||
|
[AttributeUsage(AttributeTargets.Method | AttributeTargets.Class)]
|
||
|
public class HiddenApiAttribute : System.Attribute
|
||
|
{
|
||
|
}
|
||
|
|
||
|
public class HiddenApiFilter : IDocumentFilter
|
||
|
{
|
||
|
public void Apply(OpenApiDocument swaggerDoc, DocumentFilterContext context)
|
||
|
{
|
||
|
foreach (ApiDescription apiDescription in context.ApiDescriptions)
|
||
|
{
|
||
|
if (apiDescription.TryGetMethodInfo(out MethodInfo method))
|
||
|
{
|
||
|
if (method.ReflectedType.CustomAttributes.Any(t => t.AttributeType == typeof(HiddenApiAttribute))
|
||
|
|| method.CustomAttributes.Any(t => t.AttributeType == typeof(HiddenApiAttribute)))
|
||
|
{
|
||
|
string key = "/" + apiDescription.RelativePath;
|
||
|
if (key.Contains("?"))
|
||
|
{
|
||
|
int idx = key.IndexOf("?", System.StringComparison.Ordinal);
|
||
|
key = key.Substring(0, idx);
|
||
|
}
|
||
|
swaggerDoc.Paths.Remove(key);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|