Hex*_*xie 7 c# swagger swagger-ui swashbuckle swagger-codegen
我正在尝试调整自动生成的Swagger定义中使用的模型的“ displayName”。
这只会影响Swagger名称,这意味着代码中的名称空间将保持不变,而从Swagger UI查看模型时,您会看到一个自定义名称。
当前,从代码返回的模型名称是一个命名空间,如下所示:b.c.d.e.f,我想在代码中添加一个属性,并“屏蔽” Swagger文档的名称,以便在生成文档/ Swagger定义时它将显示为CustomSwaggerName。
我有一些API(C#)使用的工具包括Swashbuckle(preferred)和SwaggerGen,但是现在,如果可能的话,我想使它在其中任何一种下工作。
我尝试使用看起来正确的属性:
[ResponseType(typeof(Company)),DisplayName("NewCompany")]
[SwaggerResponse(200,"NewCompany",typeof(object))]
Run Code Online (Sandbox Code Playgroud)
没有运气。我还浏览了SwashBuckle git存储库,希望找到一些东西。
我知道这似乎是一个奇怪的用例,但这是针对为我们的AWS API Gateway自动化编写的工具,该工具将使用Swagger定义进行一些比较。
AGu*_*ald 17
(.net core 的帐户:)
我会将类的 display 属性与自定义 swagger 模式结合起来:
[DisplayName("NewCompany")]
public class Company
{
}
Run Code Online (Sandbox Code Playgroud)
然后在启动中:
services.AddSwaggerGen(c =>
{
c.CustomSchemaIds(x => x.GetCustomAttributes<DisplayNameAttribute>().SingleOrDefault().DisplayName);
});
Run Code Online (Sandbox Code Playgroud)
另见这个答案
答案是:使用 IDocumentFilter:
private class ApplyDocumentFilter_ChangeCompany : IDocumentFilter
{
public void Apply(SwaggerDocument swaggerDoc, SchemaRegistry schemaRegistry, IApiExplorer apiExplorer)
{
if (swaggerDoc.definitions != null)
{
swaggerDoc.definitions.Add("Company123", swaggerDoc.definitions["Company"]);
}
if (swaggerDoc.paths != null)
{
swaggerDoc.paths["/api/Company"].get.responses["200"].schema.@ref = "#/definitions/Company123";
}
}
}
Run Code Online (Sandbox Code Playgroud)
这是代码: https://github.com/heldersepu/SwashbuckleTest/commit/671ce648a7cc52290b4ad29ca540b476e65240e6
这是最终结果: http://swashbuckletest.azurewebsites.net/swagger/ui/index# !/Company/Company_Get
| 归档时间: |
|
| 查看次数: |
3623 次 |
| 最近记录: |