gpt4 book ai didi

fluentvalidation - Fluent Validation - 修剪后验证字符串

转载 作者:行者123 更新时间:2023-12-04 19:07:01 25 4
gpt4 key购买 nike

我在玩 http://fluentvalidation.codeplex.com/验证一些领域模型。

我有一个典型的场景,我想验证一个字符串,例如......

RuleFor(x => x.MyString).NotNull().NotEmpty().Length(2, 20).WithMessage("Please provide a string with a minium of 2 characters.");

...在我创建一个单元测试指定 MyString 属性的长度必须为 2-20 个字符之前,一切都很好,很花哨 不是 包括空格。

所以 myObject.myString = "A" + new String(' ', 10);应该无法通过验证。

我可以使用 .Must(IsValidString) 完成所有这些工作并自己将所有逻辑写在...
    private bool IsValidString(string myString)
{
if(String.IsNullOrEmpty(myString))
return false;

// Then work on myString.Trim()'ed value.
}

...但后来我失去了所有可爱的流畅验证!!

显然,我可以使用这种方法使我的单元测试通过,并且在我的小世界中所有人都会很高兴,但是我错过了一个技巧吗?

非常感谢。

最佳答案

使用 http://ilspy.net/ 查看 dll FluentValidation dll我得到了制作以下 TrimmedLengthValidator 的灵感...

public static class DefaultValidatorExtensions
{
public static IRuleBuilderOptions<T, string> TrimmedLength<T>(this IRuleBuilder<T, string> ruleBuilder, int min, int max)
{
return ruleBuilder.SetValidator(new TrimmedLengthValidator(min, max));
}
}

public class TrimmedLengthValidator : PropertyValidator, ILengthValidator, IPropertyValidator
{
public int Min { get; private set; }
public int Max { get; private set; }

public TrimmedLengthValidator(int min, int max)
: this(min, max, () => Messages.length_error)
{ }

public TrimmedLengthValidator(int min, int max, Expression<Func<string>> errorMessageResourceSelector)
: base(errorMessageResourceSelector)
{
this.Max = max;
this.Min = min;

if (max != -1 && max < min)
throw new ArgumentOutOfRangeException("max", "Max should be larger than min.");
}

protected override bool IsValid(PropertyValidatorContext context)
{
if (context.PropertyValue == null)
return true;

int length = context.PropertyValue.ToString().Trim().Length;

if (length < this.Min || (length > this.Max && this.Max != -1))
{
context.MessageFormatter.AppendArgument("MinLength", this.Min).AppendArgument("MaxLength", this.Max).AppendArgument("TotalLength", length);
return false;
}
return true;
}
}

...这意味着我可以简单地将验证更改为:
RuleFor(x => x.myString).NotEmpty().TrimmedLength(2, 20).WithMessage("Please provide a string with a minium of 2 characters.");

摇滚吧!

关于fluentvalidation - Fluent Validation - 修剪后验证字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21756742/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com