我正在尝试调整自动生成的Swagger定义中使用的模型的“displayName”。
这只会影响Swagger名称,这意味着代码中的命名空间不会受到影响,而在从Swagger UI查看模型时,您会看到自定义名称。
目前,从代码返回的模型名称是名称空间,看起来像这样:b.c.d.e.f
,我想在代码中添加一个属性并“掩盖”Swagger文档的名称,这样生成documentation / Swagger定义时,它将显示为CustomSwaggerName
。
我有一些API(C#)使用包含Swashbuckle
(首选)和SwaggerGen
的工具,但是现在,我想让它在任何一个中工作,如果可能的话。
我尝试过使用看似正确的属性:
[ResponseType(typeof(Company)),DisplayName("NewCompany")]
[SwaggerResponse(200,"NewCompany",typeof(object))]
没有运气。我还浏览了SwashBuckle git repo,希望找到一些东西。
我知道这可能看起来像一个奇怪的用例,但它是为我们的AWS API Gateway自动化编写的工具,它将使用Swagger定义进行一些比较。
答案 0 :(得分:1)
答案是:使用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";
}
}
}
这是代码: https://github.com/heldersepu/SwashbuckleTest/commit/671ce648a7cc52290b4ad29ca540b476e65240e6
以下是最终结果: http://swashbuckletest.azurewebsites.net/swagger/ui/index#!/Company/Company_Get
答案 1 :(得分:0)
(。net核心帐户:)
我将类的显示属性与自定义的摇摇欲坠的模式相结合:
[DisplayName("NewCompany")]
public class Company
{
}
,然后在“启动”中:
services.AddSwaggerGen(c =>
{
c.CustomSchemaIds(x => x.GetCustomAttributes<DisplayNameAttribute>().SingleOrDefault().DisplayName);
});
另请参阅this answer