我有一个客户端类型提示,可以返回一个json列表,并为用户提供可以为输入字段输入的特定列表的选项。
在服务器上,我想确保提交的表单数据与其中一个地方匹配。实际上,除非某人是恶意的并且从提琴手或类似的东西发布数据,否则应该这样做。
我从存储在Redis中的列表中将数据提供给预先输入。我已经读过,从属性中联系数据库是不好的做法,但我想在允许逻辑流继续之前检查redis列表中是否存在该位置。
我可以在每个网络服务器实例的启动时静态缓存列表,但现在这意味着如果列表完全更改,则必须重新启动所有服务器才能获得更改。
也许我应该使用一个流畅的验证器而不是使用验证属性?
http://fluentvalidation.codeplex.com/wikipage?title=ValidatorFactory&referringTitle=Documentation
答案 0 :(得分:0)
我已经读过从一个内部联系数据库是不好的做法 属性[...]
您的属性无需了解任何数据库或任何相关内容。您的属性需要做的是调用服务来完成工作。从您的属性的角度来看,服务的实现将是隐藏的。
interface IValidationService
{
bool DoesPlaceExist(Place place);
}
class RedisValidationService : IValidationService
{
bool DoesPlaceExist(Place place)
{
// crazy redis magic ...
}
}
class PlaceValidationAttribute : ValidationAttribute
{
protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
var validationService = new RedisValidationService(); // ideally use IoC
var isValid = validationService.DoesPlaceExists(new Place(value));
// ... this is over simplified to just show the idea
// return blah blah
}