.net 对数据合同实施限制
是否有任何方法可以强制限制以数据契约形式作为参数传递给给定WCF服务的值.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
例如,请考虑本代码>车辆< /代码>类的设计和当然不可编译的例子:
[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库中。作为补充,应该注意的是,只有类型定义才会发送到客户端,因此虽然我们可以在从客户端接收数据后进行验证,但我们不能强制客户端执行行为。