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.
41 lines
1.4 KiB
41 lines
1.4 KiB
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); |
|
} |
|
} |
|
} |
|
} |
|
} |
|
}
|
|
|