решаемая. Вам нужно только реализовать IOperationFilter
и зарегистрировать его. Этот материал позволяет вам показывать различные примеры для одной и той же модели.
DTO
public class MyDTO
{
public int Id { get; set; }
[ShortModelMember]
public string Name { get; set; }
...
}
Метод в контроллере API
[HttpGet]
[ReturnShortModel]
public MyDTO GetSmthg()
{
return MyDTO.GetExample();
}
Фильтр пользовательских операций Swagger
public class SwaggerExcludeFilter : IOperationFilter
{
public void Apply(Operation operation, SchemaRegistry schemaRegistry, ApiDescription apiDescription)
{
if (!apiDescription.GetControllerAndActionAttributes<ReturnShortModelAttribute>().Any())
{
return;
}
var responseType = apiDescription.ResponseDescription.DeclaredType;
var description = $"OK (uses a short model of {responseType})";
var props = responseType
.GetProperties()
.Where(p => p.GetCustomAttributes(typeof(ShortModelMemberAttribute)).Any())
.ToDictionary(p => p.Name, p.PropertyType.Name);
}
operation.responses.Clear();
operation.responses.Add("200", new Response
{
description = description,
schema = new Schema
{
example = props,
},
});
}
}
И, наконец,
c.OperationFilter<SwaggerExcludeFilter>();