Tag: 流畅validation

ServiceStack – validation和数据库访问

我正在使用ServiceStack实现Api。 我的解决方案的一个关键方面是积极的validation策略。 我使用ServiceStack的ValidationFeature,这意味着如果在应用程序容器中注册了IValidator (或其后代:AbstractValidator ),validation将在服务之前自动运行。 通过积极validation,我的意思是我检查所有可能的错误情况,以及validation器级别的逻辑validation。 因此,我的服务逻辑非常简洁。 从实际的角度来看,服务validation的服务逻辑的这种独立性是非常好的,因为它提供了非常容易阅读和推理服务逻辑/实现。 但是,我开始认为FluentValidation的规则和规则集更适合简单的格式validation,而不是直接在我正在进行的数据库访问(主要是测试源自请求中提取的ID的404错误)。 问题: 1:validation逻辑在概念上是否存在访问数据库的错误? 2:从我到目前为止看到的,包括SS源代码,我没有找到一个表单来定义FluentValidation规则,例如:从请求中提取Id,访问数据库检索实体,如果是,则抛出404没有找到进入。 我只使用FV规则来定义基本格式validation,例如: RuleFor(x => x.UserName).NotEmpty(); RuleFor(x => x.Password).NotEmpty(); 其余的我手动做。 有解决这个问题的人吗? 注意:这不是关于如何将ValidationResult / ValidationError转换为HttpResult / HttpError的问题。 我已经介绍过,使用了SS 3.9.44中引入的ValidationFeature的ErrorResponseFilter。 谢谢

FluentValidation – validation包含Object列表的View Model

我正在尝试包含复杂视图模型的项目的FluentValidation,我在这里阅读文档,但我没有看到如何设置规则来validation在我的视图模型中声明的对象列表。 在下面的示例中,视图模型中的列表包含一个或多个Guitar对象。 谢谢 查看模型 [FluentValidation.Attributes.Validator(typeof(CustomerViewModelValidator))] public class CustomerViewModel { [Display(Name = “First Name”)] public string FirstName { get; set; } [Display(Name = “Last Name”)] public string LastName { get; set; } [Display(Name = “Phone”)] public string Phone { get; set; } [Display(Name = “Email”)] public string EmailAddress { get; set; } public List Guitars { […]

如何使用Fluentvalidation对列表中的每个字符串进行validation?

我有一个MVC3视图模型定义为: [Validator(typeof(AccountsValidator))] public class AccountViewModel { public List Accounts { get; set; } } 使用FluentValidation(v3.3.1.0)定义validation为: public class AccountsValidator : AbstractValidator { public AccountsValidator() { RuleFor(x => x.Accounts).SetCollectionValidator(new AccountValidator()); //This won’t work } } 并且可能会定义帐户validation: public class AccountValidator : AbstractValidator { public OrderValidator() { RuleFor(x => x).NotNull(); //any other validation here } } 我希望列表中的每个帐户都按照文档中的描述进行修改。 但是,对SetCollectionValidator的调用不起作用,因为在使用List时这不是一个选项,尽管如果它被定义为List ,那么该选项就在那里。 […]