Как добавить x-code-samples для ReDoc с помощью Swashbuckle.AspNetCore? - PullRequest
0 голосов
/ 25 марта 2019

Какой лучший способ добавить x-code-samples для ReDoc в swagger.json через Swashbuckle.AspNetCore.Annotations ?

РЕДАКТИРОВАТЬ (30 марта 2019 г.)

Надеюсь, это лучшее объяснение. В Swashbuckle.AspNetCore есть способ добавить контент в сгенерированный swagger.json.

Что задокументировано (Пример с GitHub-Page):

[HttpPost]

[SwaggerOperation(
    Summary = "Creates a new product",
    Description = "Requires admin privileges",
    OperationId = "CreateProduct",
    Tags = new[] { "Purchase", "Products" }
)]
public IActionResult Create([FromBody]Product product)

О том, чего я пытаюсь достичь

Я хотел бы сделать что-то вроде этого:

[MyCustomSwaggerOperation(
    x-code-samples = [
        {
          "lang": "CSharp", 
          "source": "console.log('Hello World');"
        }, 
        {
          "lang": "php",
          "source": ...
        }
    ]
)]
public IActionResult Create([FromBody]Product product)

1 Ответ

1 голос
/ 31 марта 2019

Вот IDocumentFilter, который вставляет «x-code-samples» в параметр

public class InjectSamples : IDocumentFilter
{
    public void Apply(SwaggerDocument swaggerDoc, DocumentFilterContext context)
    {
        PathItem path = swaggerDoc.Paths.Where(x => x.Key.Contains("Values")).First().Value;
        path.Post.Parameters.FirstOrDefault().Extensions.Add("x-code-samples", "123456");
    }
}

Да, вы можете усложнить все это аннотациями, но Swashbuckle не поддерживает "x-code-samples", поэтому вам придется создавать свои собственные, и они будут использовать его в iDocFilter.

В комментариях, которые вы продолжали указывать, что IDocumentFilters добавляются после того, как документ червя был сгенерирован, да, мы хотим этого!

И сгенерированный swagger.json с этим выглядит так:

"post": {
    "tags": [ "Values" ],
    "operationId": "ApiValuesPost",
    "consumes": [ "application/json" ],
    "produces": [],
    "parameters": [
        {
            "name": "value",
            "in": "body",
            "required": false,
            "schema": { "type": "string" },
            "x-code-samples": "123456"
        }
    ],
    "responses": {
        "200": { "description": "Success" }
    }
}   
...