在我的Asp.Net核心v5应用程序中,我们有以下模型
public class StorageRecordTypeMetadataBase
{
public string PropertyName { get; set; }
public bool Required { get; set; }
}
public class StringRecordTypeMetadata: StorageRecordTypeMetadataBase
{
public string? ValidationRegex { get; set; }
}
public class NumericRecordTypeMetadata : StorageRecordTypeMetadataBase
{
public int MinValue { get; set; }
public int MaxValue { get; set; }
}
在我的应用程序Startup.cs
中,我注册了Swagger和NSwag设置,如下所示:
public void ConfigureServices(IServiceCollection services)
{
...
services.AddSwaggerDocument();
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
app.UseOpenApi();
app.UseSwaggerUi3();
}
}
为了支持多态性,我遵循了由NSwag创建者:NSwag中的继承指南编写的指导方针,下面是我的模型看起来是如何更新的:
[JsonConverter(typeof(JsonInheritanceConverter), "discriminator")]
[KnownType(typeof(StringRecordTypeMetadata))]
[KnownType(typeof(NumericRecordTypeMetadata))]
public class StorageRecordTypeMetadataBase
{
public string PropertyName { get; set; }
public bool Required { get; set; }
}
一旦运行应用程序,swagger就会失败,因为无法生成swagger.json。在调查这个问题后,当我尝试手动导航到/swagger/v1/swagger.json时,我可以看到以下错误消息
Namotion.Reflection.XmlDocsExtensions.GetXmlDocsSummary(System.Reflection.MemberInfo)'.:System.MissingMethodException:方法未找到:'System.String System.String在NSwag.Generation.Processors.OperationSummaryAndDescriptionProcessor.ProcessSummary(OperationProcessorContext上下文中,在NSwag.Generation.AspNetCore.AspNetCoreOpenApiDocumentGenerator.AddOperationDescriptionsToDocument(OpenApiDocument文档中列出
1 attributes) at NSwag.Generation.Processors.OperationSummaryAndDescriptionProcessor.Process(OperationProcessorContext context) at NSwag.Generation.AspNetCore.AspNetCoreOpenApiDocumentGenerator.RunOperationProcessors(OpenApiDocument document, ApiDescription apiDescription, Type controllerType, MethodInfo methodInfo, OpenApiOperationDescription operationDescription, List
1 allOperations、OpenApiDocumentGenerator swaggerGenerator、OpenApiSchemaResolver schemaResolver),输入controllerType,列表1 operations, OpenApiDocumentGenerator swaggerGenerator, OpenApiSchemaResolver schemaResolver) at NSwag.Generation.AspNetCore.AspNetCoreOpenApiDocumentGenerator.GenerateForControllers(OpenApiDocument document, IGrouping
2[] apiGroups,
我已经尝试过包括所引用的包Namotion.Reflection,甚至我自己,但这也没有帮助。在配置过程中有什么东西我错过了吗?
这应该是在基本模型中添加discriminator
字段,这样当我在前端(React)侧生成模型时,它将被自动识别。我可以通过离开NSwag来实现这种行为,如下所示:
public void ConfigureServices(IServiceCollection services)
{
...
services.AddSwaggerGen(c =>
{
c.UseAllOfForInheritance();
c.SelectSubTypesUsing(baseType =>
{
return typeof(StorageRecordType).Assembly.GetTypes().Where(type => type.IsSubclassOf(baseType));
});
c.SelectDiscriminatorNameUsing((baseType) => "itemType");
c.SelectDiscriminatorValueUsing((subType) => subType.Name);
});
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
app.UseSwagger((SwaggerOptions c) => { });
app.UseSwaggerUI();
}
}
然而,这完全破坏了我的反应方面的NSwag生成过程。来自所有控制器的方法一起放在一个客户机中(而不是按控制器名称分隔),另外,参数中所需的一些类似乎也消失了。
如何修复NSwag以获得swagger.json响应中的判别器值?
发布于 2022-01-26 08:53:57
所以问题是,我使用的是较早版本的Nswag.AspNetCore
。我不是版本13.10.8
,而是升级到13.15.5
,它可以很好地处理包NJsonSchema v 10.6.6
。
https://stackoverflow.com/questions/70859358
复制相似问题