2016-05-24 44 views
0

使用C#3.0.0-beta3版本的本地程序包,按official documentation默认值在解析阶段进行分配,并且无法区分值是否完全没有传递,对我而言是至关重要的一点,因为我想对解码的原始实体进行某种验证,所以想知道任何人是否有过以自定义方式验证数据或覆盖/截取解析阶段的经验?验证并覆盖解析阶段的默认值

一些基本的例子:

  1. 对于INT32场的情况下,它是不是在所有所以不是默认为0的过去,我要处理这种情况下,提高自定义异常
  2. 对于INT32场,我想强制执行允许值范围100-1000一样扔,否则解析异常
  3. 对于字符串场,我想执行的解析/解码阶段最小长度

你将如何sugges除了在protobuf package/API之上写入自定义验证层之外,还可以这么做吗?我仍然希望有一个可扩展点但尚未找到

回答

1

验证需要在应用程序代码解析后完成。在解析器本身中没有挂钩。

Proto3不区分默认值字段和未发送字段。事实上,在发送端,如果该字段已被明确设置为默认值,则不会被编码。所以,在proto3中没有办法实现你的第一条规则。

+0

这是我在文档中找到的相同,不幸的。不知道如何使用protobuf解决这些问题的系统,似乎通过定义一些自定义默认值来区分proto3默认值,谢谢 – sll

+0

@sll Proto3也不支持自定义默认值;只有零/空。但真的,答案是你不需要做这个验证。如果默认值是可接受的输入,则继续进行。发件人有责任确保他们发送他们想要的值;您需要在服务器上验证的唯一事情是,它们发送的值不会损坏服务器。 –