自定义生成的模型名称-Swagger UI

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)

另见这个答案

  • 无法让它在 .NET Core 3.1 中工作,但 `c.CustomSchemaIds(x =&gt; x.GetCustomAttributes(false).OfType&lt;DisplayNameAttribute&gt;().FirstOrDefault()?.DisplayName ?? x.Name)` 似乎工作(请注意,如果缺少属性,名称将回退到此处的类名称)。 (6认同)

Hel*_*eda 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";
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这是代码: https://github.com/heldersepu/SwashbuckleTest/commit/671ce648a7cc52290b4ad29ca540b476e65240e6

这是最终结果: http://swashbuckletest.azurewebsites.net/swagger/ui/index# !/Company/Company_Get