gpt4 book ai didi

c# - 在 WEB API 方法中处理通用对象的正确方法是什么?

转载 作者:行者123 更新时间:2023-11-30 23:07:55 27 4
gpt4 key购买 nike

场景是这样的:

我有这个 web-api 可以处理各种支付网关,我想为所有这些网关使用相同的端点。

所以,我的想法是获取一些像这样的 json 数据:

{
"OperationId":"N0004",
"Generic_Object_That_Will_Change_According_ToThe_GateWay":
{
"Sale_id":1000,
"CodUser":"1000040",
"Email":"teste@teste.com"
}
}

或者这个,对于其他一些支付网关

{
"OperationId":"N044444",

"Generic_Object_That_Will_Change_According_ToThe_GateWay":
{
"Token":1000,
"UserSettings":{
id: "4563345",
name: "Average Joe"
}
}
}

我想做的是将这个“Generic_Object_That_Will_Change_According_ToThe_GateWay”转换为每个支付网关(paypal 或其他一些)的特定对象,因为每个支付网关都完全不同,但我不希望这影响方式客户端将调用此 API - 我希望它尽可能灵活,您只需传递此 Generic_Object_That_Will_Change_According_ToThe_GateWay 中的任何数据,然后我会将其转换为适当的对象,然后调用另一个端点(如聚合微服务设计)传递这个新创建的对象。

到目前为止,我的想法是创建一些具有这样的通用属性的类

 public class Payment<Gateway>
{
public int OperationId{ get; set; }
public Gateway paymentGateWay{ get; set; }
}

并且可以根据可用的支付网关键入此属性 paymentGateWay。

然后也许我可以在 API 方法中将此数据作为对象获取,并进行必要的转换

[Route("api/payment")]
[HttpPost]
public string Compra(Object payment) {

但是,老实说,我不知道我的做法是否正确。

我已经知道我不能在 web-api 端点中使用通用方法 - 那么考虑到此 json 数据的一部分是灵活的/通用的并且可能,在我的端点中获取此数据的正确方法是什么被转换到几个不同的对象。

总而言之,我想处理可以反序列化为几个不同已知对象的 json 数据,但我不想在我的 API 中使用不同的方法来处理每个可能的数据场景。

最佳答案

如果你想在 webapi 中使用通用方法,你必须使用 JObject类似下面的内容

 public void Post([FromBody] JObject testJObject)
{
//here you have to do some additional work in order to parse and get it working for generic entity
}

除此之外,您可以针对任何收到的请求使用模式验证器,并使用工厂模式来创建正确的对象

举个例子

var json =
" {\"OperationId\":\"N0004\",\"Generic_Object_That_Will_Change_According_ToThe_GateWay\":{\"Sale_id\":1000,\"CodUser\":\"1000040\"}}";

JsonSchema paypalschema = new JsonSchema();
paypalschema.Type = JsonSchemaType.Object;
paypalschema.Properties = new Dictionary<string, JsonSchema>
{
{"OperationId", new JsonSchema {Type = JsonSchemaType.String}},
{
"Generic_Object_That_Will_Change_According_ToThe_GateWay",
new JsonSchema {Type = JsonSchemaType.Object,Properties = new Dictionary<string, JsonSchema>
{
{"Sale_id", new JsonSchema {Type = JsonSchemaType.Integer}},
{"CodUser", new JsonSchema {Type = JsonSchemaType.String}},
}}
}
};

JObject requestObject = JObject.Parse( json);
bool valid = requestObject.IsValid(paypalschema);
if (valid)
{
//create your GatewayObject here
}
//else check another gateway object

关于c# - 在 WEB API 方法中处理通用对象的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46868177/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com