我得到了(超过)两个 Api POST 端点 .每个都需要一个json作为参数。但是当我使用相同的类名两个端点参数类中的有效负载,招摇不工作 .当我改变其中之一时,例如从 Payload 到 Payload1 比它有效。
当然,我在包装类中设置了正确的 namespace ,以便它找到 Payload。但我希望每次都使用相同的名称“Payload”。 如何使用相同的类名 Payload?
我可以在这两种情况下保留 json 名称“Payload”,并为属性设置不同的名称(“Payload1”、“Payload2”)。有用。但是也有相同的属性名称会很好。,
端点 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 使用对象完全限定名称,该名称将在 schemaIds 中包含命名空间。您可以在
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 - 在具有相同名称的不同 namespace 中招摇不同的类不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56475384/