Как добавить x-code-samples для ReDoc с помощью Swashbuckle.AspNetCore?
Каков наилучший способ добавить примеры кода x для 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 ответ
Вот 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" }
}
}