C# 自定义生成的模型名称-招摇过市用户界面
我试图调整在自动生成的招摇定义中使用的模型的“displayName” 这只会影响Swagger名称,这意味着代码中的名称空间将保持不变,而当从Swagger UI查看模型时,您将看到一个自定义名称 目前,从代码返回的模型名是一个名称空间,看起来像这样:C# 自定义生成的模型名称-招摇过市用户界面,c#,swagger,swagger-ui,swashbuckle,swagger-codegen,C#,Swagger,Swagger Ui,Swashbuckle,Swagger Codegen,我试图调整在自动生成的招摇定义中使用的模型的“displayName” 这只会影响Swagger名称,这意味着代码中的名称空间将保持不变,而当从Swagger UI查看模型时,您将看到一个自定义名称 目前,从代码返回的模型名是一个名称空间,看起来像这样:b.c.d.e.f,我想在代码中添加一个属性,并“屏蔽”Swagger文档的名称,这样当生成文档/Swagger定义时,它将显示为CustomSwaggerName 我有一些API(C#)使用的工具包括swashback(首选)和SwaggerG
b.c.d.e.f
,我想在代码中添加一个属性,并“屏蔽”Swagger文档的名称,这样当生成文档/Swagger定义时,它将显示为CustomSwaggerName
我有一些API(C#)使用的工具包括swashback
(首选)和SwaggerGen
,但现在,如果可能的话,我只想让它在这两种工具中工作
我尝试过使用看起来正确的属性:
[ResponseType(typeof(Company)),DisplayName("NewCompany")]
[SwaggerResponse(200,"NewCompany",typeof(object))]
没有运气。我还浏览了git回购协议,希望能找到一些东西
这张图片应该有助于进一步解释我想要实现的目标。
我知道这似乎是一个奇怪的用例,但这是为我们的AWS API网关自动化编写的工具,它将使用招摇定义进行一些比较。答案是:使用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";
}
}
}
代码如下:
以下是最终结果:
(占.net核心的帐户:)我会将类的display属性与自定义的招摇过市模式相结合:
[DisplayName("NewCompany")]
public class Company
{
}
然后在启动时:
services.AddSwaggerGen(c =>
{
c.CustomSchemaIds(x => x.GetCustomAttributes<DisplayNameAttribute>().SingleOrDefault().DisplayName);
});
services.AddSwaggerGen(c=>
{
c、 CustomSchemaAIDS(x=>x.GetCustomAttributes().SingleOrDefault().DisplayName);
});
另请参见无法在.NET Core 3.1中实现此功能,但是
c.CustomSchemaAIDS(x=>x.GetCustomAttributes(false).OfType().FirstOrDefault()?.DisplayName??x.Name)
似乎可以实现(请注意,如果缺少属性,名称将返回到此处的类名)。