プロパティを検証したい場合は、次のように記述します。
[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 サービスにあります。この方法で検証したいプロパティの 1 つは、何らかのビジネス ロジックを使用して検証するカスタム メソッドを使用して検証する必要があります (文字列の長さとバイト長をチェックします)。上記の例で使用したように使用できるように、このカスタム検証を設定できますか (どのようにすればよいですか); したがって、次のようになります。
[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; }
しかし、これを単体テストする方法がわかりません