Swagger (Swashbuckle для C#) показывает Mon go ObjectId как несколько полей вместо одной строки - PullRequest
1 голос
/ 18 января 2020

У меня есть метод контроллера с ObjectId параметрами:

[ProducesResponseType(200, Type = typeof(Test))]
[HttpGet]
[Route("{id}")]
public IActionResult Get(ObjectId id)
{...

Для этого метода API сваггер генерирует форму со сложной моделью ObjectId и строковым Id вместо единственного строкового параметра: swagger generated form Как я могу удалить дополнительные поля и оставить только строковый идентификатор?

Ответы [ 2 ]

1 голос
/ 27 февраля 2020

Узнайте, что ответ из другой истории также решает эту проблему:

services.AddMvc(options =>
{                    
    ...
    options.ModelMetadataDetailsProviders.Add(
        new BindingSourceMetadataProvider(typeof(ObjectId), BindingSource.Special));
});
0 голосов
/ 18 января 2020

Можно отфильтровать выходные поля для генератора форм чванства:

public class SwaggerOperationFilter : IOperationFilter
{
    private readonly IEnumerable<string> objectIdIgnoreParameters = new[]
    {
        nameof(ObjectId.Timestamp),
        nameof(ObjectId.Machine),
        nameof(ObjectId.Pid),
        nameof(ObjectId.Increment),
        nameof(ObjectId.CreationTime)
    };

    public void Apply(Operation operation, OperationFilterContext context)
    {
        operation.Parameters = operation.Parameters.Where(x =>
            x.In != "query" || objectIdIgnoreParameters.Contains(x.Name) == false
        ).ToList();
    }
}

и использовать этот фильтр в Startup.cs:

public void ConfigureServices(IServiceCollection services)
    {
        ...
        services.AddSwaggerGen(options =>
        {
            ...
            options.OperationFilter<SwaggerOperationFilter>();
        });
...

В результате мы имеем только Id поле: enter image description here

...