如何使用 Swashbuckle.AspNetCore 为 ReDoc 添加 x-code-samples?

How to add x-code-samples for ReDoc with Swashbuckle.AspNetCore?

添加 x-code-samples for ReDoc to swagger.json through Swashbuckle.AspNetCore.Annotations 的最佳方法是什么?

编辑(2019 年 3 月 30 日)

我希望这是一个更好的解释。 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)

这是一个将 "x-code-samples" 注入参数

的 IDocumentFilter
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 文档之后添加的,是的,我们想要那个!

生成的 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" }
    }
}