Создание пользовательской проверки через DataAnnotations?
Итак, когда я хочу проверить свойство, я могу написать что-то вроде этого:
[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; }
Мне это нравится, потому что в этом случае я указываю на строки регулярных выражений, которые есть в нашей общей библиотеке, и указываю сообщение об ошибке в случае сбоя. Просто и чисто.
Моя ситуация такая. Это в службе 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; }
Но я'я не уверен, как это проверить