C# ServiceStack-验证和数据库访问
我正在用ServiceStack实现一个Api。我的解决方案的一个关键方面是积极的验证策略 我使用ServiceStack的ValidationFeature,这意味着如果在应用程序容器中注册了一个IValidatorC# ServiceStack-验证和数据库访问,c#,validation,servicestack,fluentvalidation,C#,Validation,servicestack,Fluentvalidation,我正在用ServiceStack实现一个Api。我的解决方案的一个关键方面是积极的验证策略 我使用ServiceStack的ValidationFeature,这意味着如果在应用程序容器中注册了一个IValidator(或其后代:AbstractValidator),验证将在服务之前自动运行 通过积极的验证,我的意思是检查所有可能的错误场景,以及验证程序级别的逻辑验证。因此,我的服务逻辑非常简洁 从实用的角度来看,服务逻辑与服务验证的这种独立性是非常好的,因为它提供了关于服务逻辑/实现的非常易于
RuleFor(x => x.UserName).NotEmpty();
RuleFor(x => x.Password).NotEmpty();
剩下的我是手工做的。有人能解决这个问题吗
注意:这不是关于如何将ValidationResult/ValidationError转换为HttpResult/HttpError的问题。我已经通过使用SS3.9.44中引入的ValidationFeature的ErrorResponseFilter介绍了这一点。
谢谢是的,在验证逻辑中执行数据库记录存在性检查是不正确的,因为这不是验证检查。这就是为什么在示例中没有这样做的原因 检查记录是否存在是一种验证。通过一个例子来说明这一点: 如果您使用信用卡号,可以使用验证信用卡号是否有效。这将在验证器中完成,因为这是验证 但仅仅因为你有一个有效的号码并不意味着它存在,你可能有一个尚未发行的卡的有效号码。使用验证器来验证它是否存在是不正确的,因为这是一个验证过程,应该在业务逻辑中完成 当您开始使用数据库检查内容是否存在时,您就超出了验证的范围,因为您应该只将验证过的数据传递给数据库
您可以阅读更多关于。从服务边界移除验证的任何方法,与验证相同?@Blitzkrieg您希望实现在服务之前运行的请求筛选器。这将使其与验证具有类似的性质。需要注意的关键是,记录不存在应该引发NotFound异常,而不是验证异常。看这里。是的,这是很明显的。。。它确实从验证中抛出401403404409421和500。如果你在问题中看到,我在这里添加了一个注释。在SO上发布/回复的每个人的最终目标都是为生产更好的软件做出贡献。我只是指出,从我的问题中可以明显看出,我理解“不存在应该抛出NotFound异常,而不是validation异常”。就这样,没必要为此烦恼。谢谢你的帮助,这不是你第一次给我提供有用的见解。