首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >基于C#的NSwag多态模型

基于C#的NSwag多态模型
EN

Stack Overflow用户
提问于 2022-01-26 06:31:02
回答 1查看 720关注 0票数 0

在我的Asp.Net核心v5应用程序中,我们有以下模型

代码语言:javascript
运行
复制
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设置,如下所示:

代码语言:javascript
运行
复制
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中的继承指南编写的指导方针,下面是我的模型看起来是如何更新的:

代码语言:javascript
运行
复制
[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, List1 allOperations、OpenApiDocumentGenerator swaggerGenerator、OpenApiSchemaResolver schemaResolver),输入controllerType,列表1 operations, OpenApiDocumentGenerator swaggerGenerator, OpenApiSchemaResolver schemaResolver) at NSwag.Generation.AspNetCore.AspNetCoreOpenApiDocumentGenerator.GenerateForControllers(OpenApiDocument document, IGrouping2[] apiGroups,

我已经尝试过包括所引用的包Namotion.Reflection,甚至我自己,但这也没有帮助。在配置过程中有什么东西我错过了吗?

这应该是在基本模型中添加discriminator字段,这样当我在前端(React)侧生成模型时,它将被自动识别。我可以通过离开NSwag来实现这种行为,如下所示:

代码语言:javascript
运行
复制
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响应中的判别器值?

EN

回答 1

Stack Overflow用户

发布于 2022-01-26 08:53:57

所以问题是,我使用的是较早版本的Nswag.AspNetCore。我不是版本13.10.8,而是升级到13.15.5,它可以很好地处理包NJsonSchema v 10.6.6

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70859358

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档