您应该为参数创建一个DTO,为主体创建一个DTO,还是为查询创建一个,……?

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

因此,假设您有一个采用的API端点

  • 1到n参数
  • 1至n正文值
  • 1至n个查询

您想创建一个DTO来获取并验证所有这些值。您可能知道整个请求不可能只有一个DTO类,所以这是行不通的:

public class Dto
{
    [FromRoute]
    public int Id { get; set; }

    [FromBody]
    public int Foo { get; set; }
}

解析器将仅设置Foo字段,而忽略Id字段。当调用https://localhost:5001/foo/1时,Id字段的默认值将为0,而不是1。可以为url参数创建一个DTO,为主体创建一个DTO,为查询创建一个DTO,就像这样]

public class ParamsDto
{
    public int FirstId { get; set; }
    public int SecondId { get; set; }
}

// ... same for the body and queries ...

然后您可以像[FromRoute] ParamsDto paramsDto, [FromBody] BodyDto bodyDto, [FromQuery] QueryDto queryDto这样标记这些dto。您可能具有多层体系结构,并且您的Web API项目与需要DTO的层进行通信,该DTO是上面显示的所有3个DTO的组合。因此,您必须将这三个对象合并到一个大的DTO中,例如使用AutoMapper

..将请求DTO转换为命令对象(从Mediatr

[在文件夹结构,命名约定等方面是否有最佳实践来处理多个DTO?因为可能没有创建一个名为UpdateProductAmountFromOrderByIds的DTO来使用orderIdproductIdamount(产品),而是必须为参数UpdateProductAmountFromOrderByIdsParamsDto创建一个DTO,为主体UpdateProductAmountFromOrderByIdsBodyDto创建一个DTO。 。我知道这不是最好的例子,因为这里确实不需要DTO,但让我们假设您将对ID进行复杂的验证,并且主体包含多个值。您不想在控制器文件中包含那么多验证注释。就将那些单独的DTO合并为一个大型而言,这种方法对我来说真的很混乱,因此也许有更好的方法。

因此,假设您有一个API端点,该端点需要1到n个参数1到n个主体值1到n个要创建DTO的查询,以获取并验证所有这些值。您可能知道不是...

c# .net-core asp.net-core-webapi dto
1个回答
0
投票

这里是asp.net core 3.0的有效演示:

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