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



我有一个创建客户组织的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#方面经验不足,不知道如何期望或返回合适的类型。

另一种选择是使用可选属性:

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

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

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

通过这种方式,API知道要提取哪些属性,并在它们丢失时使请求失败。

相关内容

最新更新