.net - 对数据契约(Contract)实现限制

标签 .net xsd datacontract restriction

有什么方法可以对以数据协定形式作为参数传递给给定 WCF 服务的值施加限制?

例如,请考虑这个 Vehicle 的人为且肯定不可编译的示例。类(class):

[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
}

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

关于.net - 对数据契约(Contract)实现限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7733294/

相关文章:

c# - 当我的所有 .XSD 都存储为资源时,如何解析 .XSD 的 schemaLocation 属性?

python - 运行 pyxbgen 时出现问题

xml - XSD 子元素可选/必需,基于父属性名称

c#-4.0 - 如何序列化从用 DataContract(IsReference=true) 装饰的类派生的类?

c# - 将DataMemberAttribute 放在接口(interface)成员上是什么意思?

.net - 与 XML 序列化的奇遇

c# - 如何引用 System.Web.Optimization 程序集的 1.1.0.0 版本

.net - 远程代理与本地代理的持续集成和部署

c# - 如何在 C# 中读取二进制文件?

c# - 通过 HTTP 向客户端发送字节数组时操作缓慢且无响应主体