C# 在RESTAPI调用中传递字典或对象?
我正在为我的业务开发一个restapi(使用C#),并试图保持它合理的干净和简单。我正在考虑的一个设计决策是,假设您有一个资源uri: www.mydomain.com/Api/Orders 因此,要创建订单,您需要向该uri发送一篇文章,传递以下json:C# 在RESTAPI调用中传递字典或对象?,c#,json,rest,C#,Json,Rest,我正在为我的业务开发一个restapi(使用C#),并试图保持它合理的干净和简单。我正在考虑的一个设计决策是,假设您有一个资源uri: www.mydomain.com/Api/Orders 因此,要创建订单,您需要向该uri发送一篇文章,传递以下json: { "ProductNumber": "12345A", "Quantity": 5 "Cost" : 250.5 "CustomerId" : "912AFD52-8F2F-43A2-87FF-EB65D0A8FD
{
"ProductNumber": "12345A",
"Quantity": 5
"Cost" : 250.5
"CustomerId" : "912AFD52-8F2F-43A2-87FF-EB65D0A8FD8C"
...etc
}
但在服务器端,我最初认为确保传入的json被序列化到底层对象模型是一个多么好的主意,然后我就可以直接处理对象了。然而,在Id、CreatedOn、ModifiedOn等方面存在一个障碍点
在我的对象模型中,我希望在创建对象时生成Id,并在将其插入db时设置CreatedOn等。理想情况下,我希望这些属性是只读的,但是如果它们是只读的,那么当json序列化到对象时,就不会填充Id。如果不让它们只读,那么可能会有人使用json并更改这些属性
所以我在想,我是不是最好将json序列化为一个索引,然后从字典中提取属性来创建对象
老实说,整个事情我都搞糊涂了。仅仅因为有人在你的服务请求中说了些什么并不意味着你必须这么做。一个简单的方法是创建一个可以设置的属性白名单,遍历对象的键并删除白名单上的所有属性。然后,在其中填写您需要的、但由服务器生成的值。(您还应该验证允许密钥值的格式是否符合预期。)我认为“数据访问层”和“数据访问对象”就是为了。。。在UI和数据存储之间进行调解,以消除它们之间的差异。