c# - 我应该如何验证 DTO?

标签 c# .net api validation dto

我正在尝试使用 C# 中的 .net 创建 Web API

虽然在我的研究中我遇到过在 dtos 中放置验证代码或数据注释属性是一个很大的禁忌,但我看到的每个教程都有这样的内容

[HttpPost]
public IActionResult Post(SomeDto someDto)
{
     if (ModelState.IsValid){
         //DoStuff();
     }
}

如果我没记错的话,ModelState.IsValid 检查参数是否满足 SomeDto dto 的验证要求。例如:

public class SomeDto    
{
    [Range(0, 10, ErrorMessage = "Price cannot be more that 10")] //this
    public decimal Price { get; set; }
}

因此我的问题是,我是否应该在 DTO 中放置数据注释或任何验证逻辑?这将如何是“更清洁”的解决方案?

最佳答案

如果您需要实现更复杂的验证逻辑,最好使用像 FluentValidator 这样的工具。在这种情况下,您可以分离类并定义自定义验证逻辑,并使用操作的验证属性或类似的内容:

var validationResult = new MyModelValidator().Validate(dto);

将验证逻辑与模型定义文件分开,可以以不同的方式验证创建和更新的 dto。验证器将如下所示:

public class MyModelValidator: AbstractValidator<SomeDto>
    {
        public MyModelValidator()
        {
            RuleFor(x => x.Id)
                .Empty()
                .WithMessage(DefaultMessages.InvalidInput);

            RuleFor(x => x.Name)
                .NotEmpty()
                .WithMessage(DefaultMessages.InvalidName)
                .Length(2, 80)
                .WithMessage(DefaultMessages.InvalidName);
        }
    }

关于c# - 我应该如何验证 DTO?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59593301/

相关文章:

.net - 使用 ASP.NET MVC 可以在一个页面上有两个表单吗?

spring - 如何使用 ModelAndView 在 RestController 上实现 REST API

java - Azure Java API - 如何获取 vmss 缩放设置 json

wordpress - WP REST API 和 "Only authenticated users can access the REST API"

c# - 如何使用安全声明代表 AAD 用户调用 Web API?

c# - 不使用Word应用程序在C#中读取Word文件的内容

c# - 批量插入记录到 SQL Server 数据库

c# - 打开连接时 Exchange Web 服务流式订阅超时

c# - 任何人都可以帮我解决有关 C# 中的接口(interface)的问题

c# - 无法在 ASP.Net MVC 3 项目中使用 Entity Framework 保存更改