1

通过Swashbuckle.AspNetCore.Annotations将 ReDoc的 x-code-samples添加到swagger.json的最佳方法是什么?

编辑(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)
4

1 回答 1

1

这是一个将“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" }
    }
}   
于 2019-03-31T13:47:18.383 回答