У меня есть проект веб-API .Net Core 5 (C#), в котором я добавил и настроил Swagger.Net. Все работает нормально, но теперь клиент попросил меня добавить «пользовательский атрибут» в файл OAS, чтобы указать, что API еще не готовы к производству:
x-acme-production-ready=false
На сегодняшний день я всегда предоставляю файл JSON, автоматически создаваемый Swagger.
Как я могу создать файл OAS с такой структурой:
openapi: "3.0.0"
# REQUIRED - Formal commitments from the API focal point
x-acme-api-commitments:
api-100: We commit to providing a proper valid OpenAPI (swagger) specification file for each API change.....
# REQUIRED - List of versions changes
x-acme-api-changelog:
- version: 1.0.0
changes: Add GET /example
- version: 1.1.0
changes: Add POST /example
info:
# REQUIRED - Functional descriptive name of the API.
title: ACME - Basic template API
Вышеупомянутый файл выглядит как текстовое представление JSON, поэтому, возможно, этого должно быть достаточно, чтобы добавить настраиваемое поле x-acme-production-ready в JSON, но как я могу добавить его программно?
********* ОБНОВЛЕНИЕ ***********
Глядя на спецификацию выше, это настраиваемое поле следует добавить на том же уровне тега «информация» в JSON развязность:
openapi: "3.0.1",
x-acme-production-ready: "true",
info: {
title: "my-app-title",
version: "v1.0"
},
servers: [
{
url: "https://localhost:44370"
}
],
paths: {...}
Я добавил в свой проект класс CustomModelDocumentFilter, но не могу понять, как и где его вызвать и как с его помощью добавить это поле в эту позицию.
using Microsoft.OpenApi.Models;
using Swashbuckle.AspNetCore.SwaggerGen;
using System.Collections.Generic;
namespace MyApp.Swagger
{
public class CustomModelDocumentFilter : IDocumentFilter
{
public void Apply(OpenApiDocument swaggerDoc, DocumentFilterContext context)
{
swaggerDoc....
}
}
}
В моем стартапе:
services.AddSwaggerGen(c =>
{
c.DocumentFilter();
c.SwaggerDoc("v1.0", new OpenApiInfo { Title = "my app title", Version = "v1.0", Description = "my app description." });
string xmlFile = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml";
string xmlPath = Path.Combine(AppContext.BaseDirectory, xmlFile);
});
Подробнее здесь: https://stackoverflow.com/questions/694 ... t-core-web