Веб-API ASP.NET CORE с Swagger создает неправильные имена свойств

Поэтому я создал новое решение с API. Этот API работает должным образом, как вы можете видеть в следующем запросе почтальона:

{
 "Id": 1,
 "Name": "Samsung"
}

Swagger создает этот фрагмент кода:

{
 "id": 0,
 "name": "string"
}

Эти фрагменты кода показывают бренд из моей модели.

Как я могу исправить это, чтобы Swagger принимал имена свойств, как показано в первом фрагменте кода?

Вот как я настроил API и модель:

Конфигурессервисс:

public void ConfigureServices(IServiceCollection services)
        {
            services.AddControllers();

            services.AddMvc().AddJsonOptions(o =>
            {
                o.JsonSerializerOptions.PropertyNamingPolicy = null;
            });

            services.AddDbContext<PhoneCalculatorContext>(options => options.UseSqlServer(
                Configuration["ConnectionStrings:DefaultConnection"]));

            services.AddSwaggerGen(c =>
            {
                c.SwaggerDoc("v1", new OpenApiInfo { Title = "My API", Version = "v1" });
            });
        }

Настроить:

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }

            app.UseHttpsRedirection();

            // Enable middleware to serve generated Swagger as a JSON endpoint.
            app.UseSwagger(c => c.SerializeAsV2 = true);

            // Enable middleware to serve swagger-ui (HTML, JS, CSS, etc.),
            // specifying the Swagger JSON endpoint.
            app.UseSwaggerUI(c =>
            {
                c.SwaggerEndpoint("/swagger/v1/swagger.json", "My API V1");
            });

            app.UseRouting();

            app.UseAuthorization();

            app.UseEndpoints(endpoints =>
            {
                endpoints.MapControllers();
            });
        }

Модель:

public class Brand
    {
        public int Id { get; set; }
        public string Name { get; set; }
    }

person Dejavu    schedule 17.12.2019    source источник
comment
нижний кожух? теперь это значение по умолчанию в dotnet, чтобы соответствовать остальным стандартам.   -  person saj    schedule 17.12.2019
comment
Можете ли вы добавить отпечаток того, где чванство показывает это:   -  person Lutti Coelho    schedule 17.12.2019
comment
@saj Я не знал, что это стандарт REST для записи данных в нижнем регистре, поэтому я думаю, что весь вопрос не имеет значения, и я должен просто использовать его в нижнем регистре?   -  person Dejavu    schedule 18.12.2019
comment
Если мой ответ полезен, не могли бы вы принять его как ответ?   -  person Rena    schedule 23.12.2019


Ответы (1)


Вы можете настроить ISchemaFilter, чтобы отобразить пользовательское значение примера, как показано ниже:

1.Пользовательский ISchemaFilter

public class AddSchemaExamples : ISchemaFilter
{
    public void Apply(OpenApiSchema schema, SchemaFilterContext context)
    {
        if (context.ApiModel.Type == typeof(Brand))
        {
            // TODO: Set the example.
            schema.Example = new OpenApiObject
            {
                ["Id"] = new OpenApiInteger(1),
                ["Name"] = new OpenApiString("Samsung")
            };
        }
    }
}

2.Реестр ISchemaFilter:

services.AddSwaggerGen(c =>
{
    c.SwaggerDoc("v1", new OpenApiInfo { Title = "My API", Version = "v1" });
    c.SchemaFilter<AddSchemaExamples>();
});

3. Результат: введите здесь описание изображения

person Rena    schedule 18.12.2019