gpt4 book ai didi

c# - 重写 api 和反序列化对象

转载 作者:太空宇宙 更新时间:2023-11-03 23:03:24 27 4
gpt4 key购买 nike

我正在尝试将旧的 api 迁移到 webapi。问题是经验有限所以我在这里问这个问题。

当前的 api 接受单个 url 中的 json 有效负载。说/api。 json 有效负载具有以下结构

{'action': 'login', 'username': 'user1', 'password': 'password1'}

这应该是像 /api/login 这样的路由,所以我可以做类似的事情

[Route("api/Login")]
public string Login(Login login)

定义一个反序列化的类

class Login
{
public string username{ get; set; }
public string password{ get; set; }
}

所以我创建了一个路由来接受 [FromBody] 有效载荷,我一直在寻找一种方法来根据操作以一种很好的方式反序列化对象。

如果 action 键从有效载荷中移除,每个有效载荷都可以是一个有效的可序列化对象。

有什么不会生成丑陋代码的建议吗?请不要重写 api 或 v2 答案。如果我能做到,我不会问这个。

最佳答案

假设“ Action ”存在于您可以反序列化为动态类型的每个有效负载中,然后检查 Action 值,然后在您知道此 Action 是什么后再次将有效负载转换为特定类型。这解决了您遇到的特定问题。

因此您的端点代码可能如下所示:

//this is written from memory, so could have mistakes ...
var deserialisedData = Newtonsoft.Json.JsonConvert.DeserialiseObject<dynamic>(payload);

switch ( deserialisedData.action )
{
case "someValue":
//here you know what the action is so hopefully what kind of payload to expect
var properType = payload as SomeProperType
break;
}

如果您要考虑创建一个全新的、合适的 API,您可以开始为每个操作引入端点,一次一个。可以这么说,将它们分开比用一个端点来统治它们要好得多。

关于c# - 重写 api 和反序列化对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42220131/

27 4 0
文章推荐: c# - Revit API - 全类名错误
文章推荐: css - 折叠时在不同的行上显示左右导航栏链接
文章推荐: html - 下拉菜单在下一个
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com