单独的DTO用于发布,并放置请求和嵌套的json作为发布模型

时间:2019-10-31 23:44:26

标签: c# asp.net-core asp.net-web-api

关于RESTful api我有两个问题。

1。我们可以为GET,POST和PUT请求设置单独的DTO吗?是好的做法吗?或者我可以创建一个具有公共属性的抽象类,然后从中继承吗?

2。。在POST中发送嵌套的json请求是一种好习惯吗?

与以下文章相同:
https://code-maze.com/net-core-web-development-part6/

2 个答案:

答案 0 :(得分:0)

  1. 是的,更重要的是,您应该。 DTO是特定情况下特定数据组的表示。在不同的请求类型之间,该数据可能会有所不同。每当传输不同的数据时,都应该使用不同的DTO来表示它。

    如果愿意,您可以利用继承,这很有意义。但是,请注意,由于模型绑定的工作方式,您仍然需要将具体的派生类用作参数,而不是某些基类。 modelbinder将实例化由参数指定的类(因此它不能是抽象的),绑定在那个类上表示的任何请求值,并丢弃其余的值。因此,即使您绑定到BaseClass,即使请求主体是BaseClass的表示形式,您所拥有的只是DerivedClass,而不是DerivedClass。如果您随后尝试向下广播到DerivedClass,则DerivedClass特定的所有属性都将为null /默认值。

  2. 这既不是好习惯,也不是坏习惯。 JSON是一种对象表示格式。如果您的对象具有嵌套对象,那么您的JSON将具有嵌套JSON。

答案 1 :(得分:0)

  1. 我们可以为GET,POST和PUT请求设置单独的DTO吗?

不是根据请求类型创建DTO,而是为实体创建DTO。例如,您有一个Customer实体,对于Customer实体,您将创建一个Customer DTO,并且相同的Customer DTO可用于以下对象的GET,POST和PUT请求: Customer实体。

我可以创建一个具有公共属性的抽象类,然后从其继承吗?

是的,您可以在创建DTO时使用继承,但是我要说的是,复杂化不会带来附加值,请记住,如果使用不当,继承会增加系统之间的耦合。

  1. 在POST请求中发送嵌套json是一种好习惯吗?

如Chris在他的答案中所述,如果您的对象具有嵌套的对象,则您的JSON将具有嵌套的JSON。