我想在我的WCF数据合同成员上放置属性来验证字符串长度,并可能使用正则表达式进行更细粒度的参数验证。
对于数字和DateTime值,我可以使用[Range]属性,想知道你们是否发现了其他可用于数据验证的WCF数据成员属性。我已经发现了许多适用于Silverlight的属性,但对于WCF却没有找到。
我想在我的WCF数据合同成员上放置属性来验证字符串长度,并可能使用正则表达式进行更细粒度的参数验证。
对于数字和DateTime值,我可以使用[Range]属性,想知道你们是否发现了其他可用于数据验证的WCF数据成员属性。我已经发现了许多适用于Silverlight的属性,但对于WCF却没有找到。
在你的项目中添加 System.ComponentModel.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; }
希望这可以帮到你。手动验证数值:您可以使用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;
// ...
}