.NET 8 Minimal API:如何通过NSwag获取端点的EndpointFilter
在NSwag OperationProcessor中获取Minimal API的EndpointFilter
要获取端点上绑定的所有EndpointFilter,可以通过OperationProcessorContext的ApiDescription.ActionDescriptor.EndpointMetadata直接筛选,避免冗余代码。修改你的HeaderOperationProcessor如下:
public class HeaderOperationProcessor : IOperationProcessor { public bool Process(OperationProcessorContext context) { // 获取当前端点的所有EndpointFilter元数据 var endpointFilters = context.ApiDescription.ActionDescriptor.EndpointMetadata .OfType<EndpointFilterMetadata>(); // 遍历过滤器,按需处理(示例:判断是否包含HeaderFilter) foreach (var filterMetadata in endpointFilters) { if (filterMetadata.FilterType == typeof(HeaderFilter)) { var header = new OpenApiParameter() { Name = "CustomHeader", Kind = OpenApiParameterKind.Header, IsRequired = true, Type = JsonObjectType.String }; context.OperationDescription.Operation.Parameters.Add(header); break; // 避免重复添加 } } return true; } }
关键说明
EndpointFilterMetadata是Minimal API中存储过滤器的元数据类型,每个通过AddEndpointFilter<T>()添加的过滤器都会对应一个该类型的元数据项- 通过
OfType<EndpointFilterMetadata>()可以直接筛选出所有过滤器元数据,无需复杂的冗余判断 - 你可以根据
filterMetadata.FilterType判断具体是哪个过滤器,然后执行对应的OpenAPI文档修改逻辑
内容的提问来源于stack exchange,提问作者Stagdul
相关产品推荐
相关产品推荐

