如何确保 .Net API Dto 中的通用负载?

问题描述 投票:0回答:1

我有一个用于创建客户组织的 DTO。

public record clientDto(string legalname, string name, string country, australianClientData payload);

public record australianClientData(int abn);

australianClientData
中的这些属性特定于澳大利亚组织。其他国家的组织会有自己特定的属性。

如何确保

payload
的类型允许不同的子类型(即
usaClientData
chinaClientData
)?

失败的尝试#1 - 使用基类

我已经尝试让

australianClientData
从基类
parentPayload
继承。问题是我的控制器假设有效负载是基类(空),所以它完全忽略它。

失败的尝试#2 - 使用泛型类

@stuartd 这是我的想法。

    public record clientDto(string legalname, string name, string country);
    public record clientDto<TCountry>(string legalname, string name, string country, TCountry? payload) where TCountry : parentPayload;

    public abstract record parentPayload();
    public record payloadAustraliaClientData(int abn, string aciclabel, string acicofficecode) : parentPayload;
[HttpPost]
        public clientDto Post([FromBody] clientDto clientObject)
        {
            return clientObject;
        }

问题是我很难从 API 返回正确的类型。我知道

clientDto<TCountry>
clientDto
不同(我的数据可以是其中之一),但我的 API 接受并返回
clientDto
。我对 C# 缺乏经验,不知道如何期望或返回适当的类型。

c# .net dto composition
1个回答
0
投票

另一种方法是使用可选属性:

public record clientData(int? abn, int? ssn);

然后让 API 隐式地找出底层的 DTO。您还可以通过枚举强式键入请求:

public record clientData(ClientType type, int? abn, int? ssn);

这样,API 就知道要提取哪些属性,并在缺少这些属性时使请求失败。

© www.soinside.com 2019 - 2024. All rights reserved.