Как определить значения по умолчанию для параметров для интерфейса Swagger? - PullRequest
1 голос
/ 07 марта 2019

У меня есть Swagger / Swashbuckle, интегрированный в проект .NET Core 2.2 API. Все отлично работает, и то, что я спрашиваю, чисто для удобства. Рассмотрим следующий метод API:

public Model SomeEstimate(SomeRequest request) {
    return Manager.GetSomeEstimate(request);
}
...
public class SomeRequest {
    public string StreetAddress { get; set; }
    public string Zip { get; set; }
}

Когда я нажимаю /swagger/index.html и хочу попробовать этот API, мне всегда приходится вводить значения StreetAddress и Zip.

Есть ли способ предоставить значения по умолчанию для StreetAddress и Zip? Этот ответ предложил разместить атрибут [DefaultValue («значение здесь»)] каждого свойства класса SomeRequest. Возможно, он работал для обычного .NET, но не для .NET Core.

Можно ли указать значения по умолчанию для параметров для интерфейса Swagger?

1 Ответ

4 голосов
/ 07 марта 2019

Чтобы определить значения по умолчанию для параметров Swagger UI в .NET Core, следующая article определяет специальный фильтр схемы для вашего атрибута DefaultValue в вашем классе Model. Код, приведенный ниже, взят из этой статьи и предназначен только для того, чтобы проинформировать любого, кто имеет этот вопрос или сталкивался с подобной проблемой:

Украсьте желаемые свойства в модели:

public class Test {
    [DefaultValue("Hello")]
    public string Text { get; set; }
}

Основной фильтр:

using System.Collections.Generic;
using System.ComponentModel;
using System.Reflection;
using Swashbuckle.AspNetCore.Swagger;
using Swashbuckle.AspNetCore.SwaggerGen;

namespace Project.Swashbuckle {

    public class SchemaFilter : ISchemaFilter {

        public void Apply(Schema schema, SchemaFilterContext context) {
            if (schema.Properties == null) {
                return;
            }

            foreach (PropertyInfo propertyInfo in context.SystemType.GetProperties()) {

                // Look for class attributes that have been decorated with "[DefaultAttribute(...)]".
                DefaultValueAttribute defaultAttribute = propertyInfo
                    .GetCustomAttribute<DefaultValueAttribute>();

                if (defaultAttribute != null) {
                    foreach (KeyValuePair<string, Schema> property in schema.Properties) {

                        // Only assign default value to the proper element.
                        if (ToCamelCase(propertyInfo.Name) == property.Key) {
                            property.Value.Example = defaultAttribute.Value;
                            break;
                        }
                    }
                }
            }
        }

        private string ToCamelCase(string name) {
            return char.ToLowerInvariant(name[0]) + name.Substring(1);
        }
    }
}

И, наконец, регистрация его в параметрах Swagger (в файле Startup.cs):

services.AddSwaggerGen(c => {
    // ...
    c.SchemaFilter<SchemaFilter>();
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...