gpt4 book ai didi

c# - 通过 DataAnnotations 创建自定义验证?

转载 作者:行者123 更新时间:2023-11-30 22:23:55 25 4
gpt4 key购买 nike

好吧,当我想验证一个属性时,我可能会这样写:

    [Required]
[StringLength(255)]
[DataType(DataType.EmailAddress)]
[RegularExpression(RegexStrings.Email, ErrorMessage = "Email is not valid.")]
[DataMember(IsRequired = true, Name="Email", Order = 1)]
public string Email { get; set; }

我喜欢这个,因为在这种情况下,我将它指向我们公共(public)库中的正则表达式字符串,并在失败时指定一条错误消息。简单干净。

我的情况是这样的。这是在 WCF RESTful 服务中。我希望以这种方式验证的属性之一需要使用自定义方法进行验证,该方法使用一些业务逻辑进行验证(它检查字符串长度和字节长度)。我可以(以及如何)设置此自定义验证,以便我可以像上面示例中那样使用它吗?所以它看起来像:

[StreamValidation(ValidationClass, ErrorMessage = "Serial number is invalid")]
public string Ksn { get; set; }

更新:

我构建了以下类作为我的属性:

[AttributeUsage(AttributeTargets.Property | AttributeTargets.Field, AllowMultiple = false)]
public class KsnValidation : ValidationAttribute
{
public override bool IsValid(object value)
{
if (!(value is string)) return false;

var val = (string) value;
var bytes = Enumerable
.Range(0, val.Length / 2)
.Select(x => Byte.Parse(val.Substring(2 * x, 2), NumberStyles.HexNumber))
.ToArray();
return val.Length == 20 && bytes.Length == 10;
}

public override string FormatErrorMessage(string name)
{
return base.FormatErrorMessage(name);
}
}

然后装饰以下属性:

[KsnValidation(ErrorMessage = "Wrong Name")]
public string Ksn { get; set; }

但我不确定如何对此进行单元测试

最佳答案

SO answer给出了 MVC2 的答案。

这里是 a post适用于 MVC3 及更高版本。

基本上你创建一个属性:

public class MyValidationAttribute: ValidationAttribute
{
public MyValidationAttribute()
{ }

protected override ValidationResult IsValid(
object value, ValidationContext validationContext)
{

...
if (somethingWrong)
{
return new ValidationResult(errorMessage);
}
return null; // everything OK
}
}

关于c# - 通过 DataAnnotations 创建自定义验证?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13092555/

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