У меня есть Web Api с шаблоном URL: 'TestEmail / Render / {templateName}', где возможные значения параметра templateName определяются во время выполнения с использованием отражения.
public class TestEmailController : Controller
{
public static IEnumerable<Type> AllNotificationTypes =>
typeof(INotification).Assembly.GetTypes()
.Where(t => typeof(INotification).IsAssignableFrom(t) && !t.IsAbstract);
[HttpGet("[controller]/{templateName}")]
public async Task<IActionResult> Render(string templateName)
{
Type templateType = AllNotificationTypes.FirstOrDefault(t => t.Name == templateName);
if (templateType == null) return NotFound();
string renderedHtml = ...
return Content(renderedHtml, "text/html");
}
}
Как отобразить возможные значенияв файле swagger с использованием Swashbuckle.AspNetCore?
EDIT : Вдохновленный ответом HelperSepu, я получил:
[SwaggerOperationFilter(typeof(TemplateNameOperationFilter))]
[HttpGet("[controller]/{templateName}")]
public async Task<IActionResult> Render(string templateName)
{
....
public class TemplateNameOperationFilter : IOperationFilter
{
public void Apply(Operation operation, OperationFilterContext context)
{
var param = (PartialSchema)operation.Parameters.First(o => o.Name == "templateName");
param.Enum = TestEmailController.AllNotificationTypes.Select(type => (object)type.Name).ToList();
}
}