为x-code-samples通过ReDoc将Swashbuckle.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)
答案 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" }
}
}