如何使用Swashbuckle.AspNetCore为ReDoc添加X代码示例?

时间:2019-03-24 22:48:17

标签: swashbuckle redoc

x-code-samples通过ReDocSwashbuckle.AspNetCore.Annotations添加到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)

1 个答案:

答案 0 :(得分:0)

这是一个IDocumentFilter,可将“ x代码样本”注入到参数中

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" }
    }
}