如何处理 ASP.NET Web API 中 DTO 中的 Id 属性

问题描述 投票:0回答:2

让我们考虑一个简单的

UserDTO

public record UserDTO(string Id, string Username);

这意味着在 Swagger UI 中,对于

POST
请求,会询问
Id
Username
,但不会使用
Id
。也许这会让客户感到困惑。

另一方面,对于

GET
请求,它可能很有用。

避免这种混乱的正确方法是什么?

  • 仅使用
    Username
    字符串作为
    POST
    参数(这里可以,但可能会因为 10 个属性而变得混乱);
  • 2 个不同的 DTO 用于
    POST
    GET
    (大量冗余);
  • 还有其他选择吗?

谢谢。

asp.net-core .net-core asp.net-core-webapi swagger-ui
2个回答
3
投票

只需为不同的端点创建单独的 DTO。

  • POST /users 接受`CreateUserDto(..创建的相关属性..)
  • GET /users - 返回列表。其中 UserDto(string Id, ...其他属性) 等等。

不要害怕创建更多类型,即使它们之间存在一些重复。稍后您始终可以导出常见的抽象。


2
投票

DTO 根据定义是关于传输数据的,因此它应该完全依赖于您要传输的数据。在大多数情况下,对具有不同目的的不相关端点使用相同的 DTO 是没有意义的。即使某些字段在不同端点中相同,也会建议使用特定的 DTO,不要考虑这种代码重复

例如,在基本

GET
端点中,您想要通过 ID 检索项目,只需要 ID,因此您甚至可以跳过使用 DTO,并让端点接受单个
id
参数。 对于更复杂的
GET
端点,允许您过滤、排序、分页等。包含所有这些条件的 DTO 可能会很有用。

POST
方面,如果您在服务器中生成ID(如果您将项目存储在某个数据库中,则可能应该这样做),则不需要从客户端发布该字段。如果您的 DTO 中有这样一个字段,客户会感到困惑,因为您会忽略它!

© www.soinside.com 2019 - 2024. All rights reserved.