gpt4 book ai didi

asp.net - Swagger 不同 namespace 中具有相同名称的不同类不起作用

转载 作者:行者123 更新时间:2023-12-03 00:48:08 24 4
gpt4 key购买 nike

我有(超过)两个 Api POST 端点。每个都需要一个 json 作为参数。但是,当我在两个端点参数类中使用相同的类名Payload时,Swagger 不起作用。当我改变其中之一时,例如从 PayloadPayload1 比它有效。当然,我在包装类中设置了正确的 namespace ,以便它找到有效负载。但我希望每次都使用相同的名称“Payload”。 如何使用相同的类名Payload我可以在这两种情况下保留 json 名称“Payload”,只需为属性设置不同的名称(“Payload1”、“Payload2”)。有用。但也有相同的属性名称会很好。,

enter image description here

端点A

[HttpPost()]

公共(public)异步任务PostPerson([FromBody]JsonWrapperA jsonWrapperA)

namespace myProject.A
{
public class JsonWrapperA
{
[JsonProperty("name", Required = Required.AllowNull)]
public string Name { get; set; }

[JsonProperty("payload", Required = Required.AllowNull)]
public Payload Payload { get; set; }
}

public class Payload
{
[JsonProperty("value", Required = Required.AllowNull)]
public double Value { get; set; }
}
}

端点B

[HttpPost()]

公共(public)异步任务PostCompagn([FromBody]JsonWrapperB jsonWrapperB)

namespace myProject.B
{
public class JsonWrapperB
{
[JsonProperty("compagny", Required = Required.AllowNull)]
public string Compagny { get; set; }

[JsonProperty("payload", Required = Required.AllowNull)]
public Payload Payload { get; set; }
}

public class Payload
{
[JsonProperty("age", Required = Required.AllowNull)]
public double Age{ get; set; }
}
}

最佳答案

默认情况下,swagger 将尝试为 API 端点的返回类型或参数类型的对象构建其架构 ID,并将在文档的“模型”部分中显示这些对象。它将根据对象的类名构建这些模式 ID。

当您尝试让两个或多个类具有相同的名称时,即使它们位于不同的命名空间中,您也会收到冲突的 schemaIds 错误:

InvalidOperationException: Conflicting schemaIds: Identical schemaIds detected for types NamespaceOne.MyClass and NamespaceTwo.MyClass. See config settings - "CustomSchemaIds" for a workaround

这意味着需要配置 Swagger 来更改其生成 SchemaId 的方式。您可以简单地告诉 swagger 使用对象完全限定名称,该名称将在 schemaId 中包含命名空间。您可以在 Startup.cs 文件中的 ConfigureServices 方法中执行此操作,如下所示:

//add using statement for Swagger in Startup.cs
using Swashbuckle.AspNetCore.Swagger;

...

public void ConfigureServices(IServiceCollection services)
{
services.AddSwaggerGen(config =>
{
//some swagger configuration code.

//use fully qualified object names
config.CustomSchemaIds(x => x.FullName);
}
}

关于asp.net - Swagger 不同 namespace 中具有相同名称的不同类不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48894512/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com