使用 Swashbuckle.Swagger 手动添加端点
Add endpoints manually with Swashbuckle.Swagger
我正在使用 CMS。因此,当我转到即“/painter”时,它被路由到 'JobController'。 /plumber 也被路由到 'JobController'。
而且它是MVC而不是WebAPI,所以swagger不会发现它,这是可以理解的。
但是我有一个用例,如果我访问 /pianter?json=1 它会返回 json 而不是 HTML。
因此,作为 API UI,我们想公开此 'fake' 端点,以便设计人员可以看到输出模型。
那么我可以添加一个完全虚假的端点 - 只是为了在设计人员和开发人员之间拥有一个大摇大摆的用户界面 UI 吗?
除了视觉效果 UI,我们还想生成一些基于 openapi 标准的 TypeScript。
这里有一个选项可以使用 IDocumentFilter
:
创建带有 swashbuckle 的假端点
private class DocumentFilterAddFakes : IDocumentFilter
{
private PathItem FakePathItem(int i)
{
var x = new PathItem();
x.get = new Operation()
{
tags = new[] { "Fake" },
operationId = "Fake_Get" + i.ToString(),
consumes = null,
produces = new[] { "application/json", "text/json", "application/xml", "text/xml" },
parameters = new List<Parameter>()
{
new Parameter()
{
name = "id",
@in = "path",
required = true,
type = "integer",
format = "int32"
}
},
};
x.get.responses = new Dictionary<string, Response>();
x.get.responses.Add("200", new Response() { description = "OK", schema = new Schema() { type = "string" } });
return x;
}
public void Apply(SwaggerDocument swaggerDoc, SchemaRegistry schemaRegistry, IApiExplorer apiExplorer)
{
for (int i = 0; i < 10; i++)
{
swaggerDoc.paths.Add("/Fake/" + i + "/{id}", FakePathItem(i));
}
}
}
这是这样的结果:
http://swashbuckletest.azurewebsites.net/swagger/ui/index#/Fake
背后的完整代码在github:
https://github.com/heldersepu/SwashbuckleTest/blob/master/Swagger_Test/App_Start/SwaggerConfig.cs#L316
我正在使用 CMS。因此,当我转到即“/painter”时,它被路由到 'JobController'。 /plumber 也被路由到 'JobController'。 而且它是MVC而不是WebAPI,所以swagger不会发现它,这是可以理解的。
但是我有一个用例,如果我访问 /pianter?json=1 它会返回 json 而不是 HTML。
因此,作为 API UI,我们想公开此 'fake' 端点,以便设计人员可以看到输出模型。
那么我可以添加一个完全虚假的端点 - 只是为了在设计人员和开发人员之间拥有一个大摇大摆的用户界面 UI 吗?
除了视觉效果 UI,我们还想生成一些基于 openapi 标准的 TypeScript。
这里有一个选项可以使用 IDocumentFilter
:
private class DocumentFilterAddFakes : IDocumentFilter
{
private PathItem FakePathItem(int i)
{
var x = new PathItem();
x.get = new Operation()
{
tags = new[] { "Fake" },
operationId = "Fake_Get" + i.ToString(),
consumes = null,
produces = new[] { "application/json", "text/json", "application/xml", "text/xml" },
parameters = new List<Parameter>()
{
new Parameter()
{
name = "id",
@in = "path",
required = true,
type = "integer",
format = "int32"
}
},
};
x.get.responses = new Dictionary<string, Response>();
x.get.responses.Add("200", new Response() { description = "OK", schema = new Schema() { type = "string" } });
return x;
}
public void Apply(SwaggerDocument swaggerDoc, SchemaRegistry schemaRegistry, IApiExplorer apiExplorer)
{
for (int i = 0; i < 10; i++)
{
swaggerDoc.paths.Add("/Fake/" + i + "/{id}", FakePathItem(i));
}
}
}
这是这样的结果: http://swashbuckletest.azurewebsites.net/swagger/ui/index#/Fake
背后的完整代码在github: https://github.com/heldersepu/SwashbuckleTest/blob/master/Swagger_Test/App_Start/SwaggerConfig.cs#L316