对数据合同实施限制

时间:2011-10-11 22:28:54

标签: .net xsd datacontract restriction

有没有办法可以对以数据合同形式传递的值作为参数给予给定WCF服务的限制?

例如,请考虑此Vehicle类的设计且当然不可编译的示例:

[DataContract]
public class Vehicle
{
    [DataMember]
    [Restriction(MinValue = 1, MaxValue = 30)] // Certainly not allowed... or is it?
    public int NumberOfWheels { get; set; }
}

当然,由于没有人希望找到一辆超过30轮的车辆,我想将NumberOfWheels的范围限制在1到30之间。有没有办法在这种情况下,可以使用XSD限制/方面来限制可接受值的范围吗?

(请注意,我当然可以将NumberOfWheels的类型从int更改为byte,以进一步限制可能值的范围。但是,不会解决问题...当然,没有人希望车辆有255个车轮。)

1 个答案:

答案 0 :(得分:3)

以下是使用dataannotations的示例:

using System.ComponentModel.DataAnnotations;

[DataContract]
public class Test
{
    [DataMember]
    [Range(1, 30)]
    public int MyProperty { get; set; }
}

public void DoWork(Test t)
{            
    // this will throw validation exceptions, overloads are available to trap and handle
    Validator.ValidateObject(t, new ValidationContext(t), true);
    //do stuff here
}

同样应该注意,使用此方法无法将行为发送/强制到客户端。它只会验证对象是否符合描述验证。