Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 验证布尔属性_C#_Validation_Properties_Boolean - Fatal编程技术网

C# 验证布尔属性

C# 验证布尔属性,c#,validation,properties,boolean,C#,Validation,Properties,Boolean,问这件事我有点不好意思。但似乎在其他任何地方都找不到它的描述 比如说,我们有一个webservice方法StoreNewItem(Item Item),它接受一个包含该项所有属性的datacontract。 我们将在数据库中插入此新项。 有些属性是必需的,有些是布尔属性 我们应该验证输入数据,即验证必填字段是否实际具有有效数据,还是这是调用Web服务的客户端的责任 如果是,如何处理布尔属性?客户机可能会忽略它们,它们将作为false存储在数据库中,因为我们无法知道它们是否设置为false,或者只

问这件事我有点不好意思。但似乎在其他任何地方都找不到它的描述

比如说,我们有一个webservice方法StoreNewItem(Item Item),它接受一个包含该项所有属性的datacontract。 我们将在数据库中插入此新项。 有些属性是必需的,有些是布尔属性

我们应该验证输入数据,即验证必填字段是否实际具有有效数据,还是这是调用Web服务的客户端的责任

如果是,如何处理布尔属性?客户机可能会忽略它们,它们将作为false存储在数据库中,因为我们无法知道它们是否设置为false,或者只是被客户机忽略/忘记

对于这些强制属性,使用具有True、False和Empty的枚举而不是bool作为类型是否有效? 或者这根本不是我们的问题


欢迎所有想法

一定要验证数据。恶意实体可以很容易地复制您的客户端。

您可以使用web服务完全支持的可空布尔(bool?)而不是枚举

IMHO您的检查逻辑至少应该在db中,它可以将错误转发到服务层(服务层反过来会引发错误)。不过,我也会在服务级别使用它,以便在命中数据库之前引发错误(验证也是业务层的一部分)。在UI中也有它是很好的,但不是强制性的


永远不要假设您的客户向您发送了有效数据。

这取决于您的业务规则

如果希望允许use不传递某些参数,但希望它们获得默认值,则可以使用可选参数

void MyServiceMethod(bool CanDoIt=false,int somethingElse)
或者,如果您希望允许用户不使用null值传递所有参数(如果您的业务规则允许),则可以使您的服务获得null值

void MyServiceMethod(可为null的canDoItfalse,int somethingElse)
通常,您应该始终在服务端验证数据,并在验证失败的情况下返回服务故障数据协定

更多信息请访问


如果没有外部第三方访问web服务(仅在内部使用),您可以不在服务中进行验证。就我个人而言,我不会那么做;向服务发送坏数据太容易了。另外,您还必须在所有客户机上复制所有验证逻辑。因此,在我看来,在服务中验证是必须的


对于布尔函数,您可以使用可为空的布尔函数(
bool?
)。

谢谢您的回答!重新审视它们的相似之处:-)
void MyServiceMethod(Nullable<bool> canDoItfalse,int somethingElse)