SwashBuckle / Swagger скрывает мои неизменные свойства - PullRequest
1 голос
/ 11 мая 2019

Для моделей, которые передаются в действия через [FromBody] Мне нравится делать их свойства неизменяемыми public int SomeProperty { get; private set; }.Таким образом, я знаю, что входные данные для моего обработчика не изменены.

Проблема, с которой я столкнулся, заключается в том, что Swagger и Swashbuckle полностью игнорируют эти поля для отображения примеров полезных нагрузок параметров.Я посмотрел на схему swagger, сгенерированную из нашего API, и увидел, что все упомянутые поля имеют readOnly: true.

. Мне интересно, есть ли способ настроить Swashbuckler или Swagger, чтобы не игнорировать эти свойства,Или, может быть, есть какой-то способ просто установить readonly в false для каждого определения, используя некоторую часть инфраструктуры расширения SwashBuckle?

Редактировать: Добавление образца из swagger.json

В этом примере someProperty помечен как readOnly,Я думаю, именно поэтому свойство не отображается в сгенерированном примере параметра POST.Если есть способ заставить swagger gen не добавлять какие-либо свойства только для чтения, я бы с этим согласился.

{
  "type": "object",
  "properties": {
    "someProperty": {
      "format": "int32",
      "type": "integer",
      "readOnly": true
    },
  }
}

1 Ответ

2 голосов
/ 12 мая 2019

Итак, я нашел решение. Я создал реализацию ISchemaFilter, которая просто устанавливает readonly для каждого свойства в false. Мне нужно больше думать о том, что это означает в нисходящем направлении, поэтому я не уверен, нравится ли мне решение.

public class IgnoreReadOnlySchemaFilter : ISchemaFilter
{
    public void Apply(Schema schema, SchemaFilterContext context)
    {
        schema.ReadOnly = false;
        if (schema.Properties != null)
        {
            foreach (var keyValuePair in schema.Properties)
            {
                keyValuePair.Value.ReadOnly = false;
            }
        }
    }
}
...