我正在尝试使用 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/