在REST Api调用中传递字典或对象?

时间:2012-06-27 08:07:24

标签: c# json rest

我正在为我的业务开发一个REST Api(使用C#)并尝试保持它相当干净和简单。我正在努力解决的一个设计决定就是说你有一个资源uri:

www.mydomain.com/Api/Orders

因此,要创建一个订单,您将通过以下json对此uri执行POST:

{
   "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序列化为一个dicationary然后只是创建从字典中拉出属性的对象?

说实话,我对整件事感到困惑。

1 个答案:

答案 0 :(得分:0)

仅仅因为某人在对您的服务的请求中说了某些内容并不意味着您必须这样做。一种简单的方法是创建可以设置的属性白名单,并浏览对象的键并删除白名单中的所有内容。然后,在那里填写您需要但由服务器生成的值。 (您还应该验证允许的键的值的格式是否符合预期。)