.net 对数据合同实施限制

.net 对数据合同实施限制,.net,xsd,datacontract,restriction,.net,Xsd,Datacontract,Restriction,是否有任何方法可以强制限制以数据契约形式作为参数传递给给定WCF服务的值 例如,请考虑本代码>车辆< /代码>类的设计和当然不可编译的例子: [DataContract] public class Vehicle { [DataMember] [Restriction(MinValue = 1, MaxValue = 30)] // Certainly not allowed... or is it? public int NumberOfWheels { get; se

是否有任何方法可以强制限制以数据契约形式作为参数传递给给定WCF服务的值

例如,请考虑本代码>车辆< /代码>类的设计和当然不可编译的例子:

[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个车轮。)

下面是一个使用数据注释的示例:

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
}

再次需要注意的是,不能使用此方法将行为发送/强制到客户端。它将只验证对象是否满足所述的验证要求。

除了将看似域验证的内容放在服务层之外,您可以使用dataannotation验证程序吗?i、 e.[范围(1,30)]。它们位于System.ComponentModel.DataAnnotations库中。作为补充,应该注意的是,只有类型定义才会发送到客户端,因此虽然我们可以在从客户端接收数据后进行验证,但我们不能强制客户端执行行为。