我有一个用于创建客户组织的 DTO。
public record clientDto(string legalname, string name, string country, australianClientData payload);
public record australianClientData(int abn);
australianClientData
中的这些属性特定于澳大利亚组织。其他国家的组织会有自己特定的属性。
如何确保
payload
的类型允许不同的子类型(即 usaClientData
、chinaClientData
)?
我已经尝试让
australianClientData
从基类 parentPayload
继承。问题是我的控制器假设有效负载是基类(空),所以它完全忽略它。
@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# 缺乏经验,不知道如何期望或返回适当的类型。
另一种方法是使用可选属性:
public record clientData(int? abn, int? ssn);
然后让 API 隐式地找出底层的 DTO。您还可以通过枚举强式键入请求:
public record clientData(ClientType type, int? abn, int? ssn);
这样,API 就知道要提取哪些属性,并在缺少这些属性时使请求失败。