8

我希望在我的 WCF 数据合同成员上放置属性以验证字符串长度,并可能使用正则表达式进行更精细的参数验证。

我可以将 [Range] 属性用于数值和 DateTime 值,并且想知道你们中是否有人找到了可用于数据验证的任何其他 WCF 数据成员属性。我发现了 Silverlight 的一些属性,但 WCF 没有。

4

3 回答 3

22

添加System.ComponentModel.DataAnnotations对您的项目的引用。

该参考提供了一些 DataAnnotations,它们是:

RequiredAttribute, RangeAttribute, StringLengthAttribute, RegularExpressionAttribute

您可以在您的数据合同中如下所示。

    [DataMember]
    [StringLength(100, MinimumLength= 10, ErrorMessage="String length should be between 10 and 100." )]
    [StringLength(50)]     // Another way... String max length 50
    public string FirstName { get; set; }

    [DataMember]
    [Range(2, 100)]
    public int Age { get; set; }

    [DataMember]
    [Required]
    [RegularExpression(@"\b[A-Z0-9._%-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b", ErrorMessage = "Invalid Mail id")]
    public string Email { get; set; }

希望这可以帮助。

于 2012-10-15T18:23:09.523 回答
2

手动验证值:您可以使用 Validator 类手动应用验证测试。您可以在属性的 set 访问器上调用 ValidateProperty 方法,以根据属性的验证属性检查值。当数据绑定从验证属性接收验证异常时,您还必须将 ValidatesOnExceptions 和 NotifyOnValidationError 属性都设置为 true。

var unsafeContact = Request["contactJSON"];
try
{
    var serializer = new DataContractJsonSerializer(typeof(Contact));
    var stream = new MemoryStream(Encoding.UTF8.GetBytes(unsafeContact));
    Contact = serializer.ReadObject(stream) as Contact;
    stream.Close();
}
catch (Exception)
{
   // invalid contact
}

联系类别:

[DataContract]
public sealed class Contact
{
    /// <summary>
    /// Contact Full Name
    /// </summary>
    /// <example>John Doe</example>
    [DataMember(Name = "name", IsRequired = true)]
    [StringLength(100, MinimumLength = 1, ErrorMessage = @"Name length should be between 1 and 100.")]
    public string Name {
        get
        {
            return HttpUtility.HtmlEncode(_name);
        }
        internal set
        {
            Validator.ValidateProperty(value, new ValidationContext(this, null, null) { MemberName = "Name" });
            _name = value;
        }
    }
    private string _name;

    // ...
}
于 2014-03-13T00:08:23.067 回答
1

尝试寻找 WCF 数据注释。WCFDataAnnotations 允许您使用System.ComponentModel.DataAnnotations属性自动验证 WCF 服务操作参数。

http://wcfdataannotations.codeplex.com/

于 2014-03-17T16:09:17.140 回答