gpt4 book ai didi

c# - 关于 DataType 如何工作,是否有很好的数据注释引用?

转载 作者:太空狗 更新时间:2023-10-29 20:09:09 27 4
gpt4 key购买 nike

我有一个客户类,它同时具有 PhoneNumber 和 Email 属性。使用 DataAnnotations,我可以使用 DataType 验证属性来修饰属性,但我看不出这是什么意思。

例如:

 [DataType(DataType.PhoneNumber)]
public string PhoneNumber {get; set;}

我有一个单元测试将“1515999A”分配给此属性。当我逐步通过验证运行程序时,该值被认为对电话号码有效。我本以为这应该是无效的。

我用谷歌搜索了一些,但找不到对各种枚举数据类型实际捕捉到什么的合理解释。有什么值得引用的地方吗?

编辑:

这是我用于验证运行程序的内容......

    public virtual XLValidationIssues ValidateAttributes<TEntity>(TEntity entity)
{
var validationIssues = new XLValidationIssues();

// Get list of properties from validationModel
var props = entity.GetType().GetProperties();

// Perform validation on each property
foreach (var prop in props)
ValidateProperty(validationIssues, entity, prop);

// Return the list
return validationIssues;
}

protected virtual void ValidateProperty<TEntity>(XLValidationIssues validationIssues, TEntity entity, PropertyInfo property)
{
// Get list of validator attributes
var validators = property.GetCustomAttributes(typeof(ValidationAttribute), true);
foreach (ValidationAttribute validator in validators)
ValidateValidator(validationIssues, entity, property, validator);
}

protected virtual void ValidateValidator<TEntity>(XLValidationIssues validationIssues, TEntity entity, PropertyInfo property, ValidationAttribute validator)
{
var value = property.GetValue(entity, null);
if (!validator.IsValid(value))
validationIssues.Add(new XLValidationIssue(property.Name, value, validator.FormatErrorMessage(property.Name, value)));
}

最佳答案

我在网上找不到太多关于 DataType.PhoneNumber 的信息,但我确实找到了这个:

http://forums.asp.net/p/1370546/2863383.aspx

In the RTM release, the DataType.EmailAddress is only used to mark the type of data for your own use.

我想了解更多,所以我拿出了 Red Gate 的 .NET Reflector 并开始四处挖掘。

查看 DataTypeAttribute 类时,Joseph Daigle 是正确的——每个 DataType 属性都不做任何验证;总是返回真(即“有效”)。在某些数据类型上,完成了一些自定义显示字符串格式设置。然而,电话号码几乎保持不变。

所以,我研究了这个问题的可能解决方案。根据我的发现,this看起来是最好的:

public class EvenNumberAttribute : ValidationAttribute
{
public EvenNumberAttribute() : base(() => Resource1.EvenNumberError) { }
public EvenNumberAttribute(string errorMessage) : base(() => errorMessage) { }

protected override ValidationResult IsValid(object value,
ValidationContext validationContext)
{
if (value == null)
{
return ValidationResult.Success;
}

int convertedValue;
try
{
convertedValue = Convert.ToInt32(value);
}
catch (FormatException)
{
return new ValidationResult(Resource1.ConversionError);
}

if (convertedValue % 2 == 0)
{
return ValidationResult.Success;
}
else
{
return new ValidationResult(FormatErrorMessage(validationContext.DisplayName));
}
}
}

当然,这可以验证数字是奇数还是偶数。您可以为实际执行验证的电话号码、电子邮件等编写自定义验证属性。

关于c# - 关于 DataType 如何工作,是否有很好的数据注释引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1357574/

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