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

标签 asp.net asp.net-web-api asp.net-core

我得到了(超过)两个 Api POST 端点 .每个都需要一个json作为参数。但是当我使用相同的类名两个端点参数类中的有效负载,招摇不工作 .当我改变其中之一时,例如从 Payload 到 Payload1 比它有效。
当然,我在包装类中设置了正确的 namespace ,以便它找到 Payload。但我希望每次都使用相同的名称“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 使用对象完全限定名称,该名称将在 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/

相关文章:

.net - "Must Know".NET Architect/Lead 的 IIS 功能

asp.net - OpenIDConnect 响应类型混淆

asp.net-core - Asp.Net Core 3 正常关机抛出 OperationCanceledException

ASP.NET 5 MVC 6 中的本地化

asp.net-core - CORS 策略会阻止来自非浏览器请求的资源访问吗?

c# - ASP.Net MVC SQL 格式化 HTML

c# - 网站使用来自错误目录的代码隐藏文件?

asp.net - 从字符串 "31/03/2012"到类型 'Date' 的转换无效

c# - 从 mvc Controller 调用远程 Web api

.net - .NET Web API 中的多个 url 级别