16

我正在尝试调整自动生成的 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))]

没有运气。我还浏览了SwashBuckle git repo,希望能找到一些东西。

一张应该有助于进一步解释我想要达到的目标的图像。 在此处输入图像描述

我知道这可能看起来像一个奇怪的用例,但它是为我们的 AWS API Gateway 自动化编写的工具,它将使用 Swagger 定义进行一些比较。

4

2 回答 2

17

(.net core 的帐户:)
我会将类的 display 属性与自定义的招摇模式结合起来:

[DisplayName("NewCompany")]
public class Company
{
}

然后在启动中:

services.AddSwaggerGen(c =>
{                     
    c.CustomSchemaIds(x => x.GetCustomAttributes<DisplayNameAttribute>().SingleOrDefault().DisplayName);
});

另见这个答案

于 2019-05-15T14:47:19.863 回答
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

于 2017-06-29T20:20:06.537 回答