2

プロパティを検証したい場合は、次のように記述します。

    [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; }

しかし、これを単体テストする方法がわかりません

4

2 に答える 2

3

このSOの答えは、MVC2の答えになります。

そしてここに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
    }
}
于 2012-10-26T18:59:08.790 に答える
0

ValidationAttributeのドキュメントには、カスタム検証属性を作成する方法が示されています。

于 2012-10-26T19:06:28.327 に答える