繁体   English   中英

我正在用C#构建API /框架,当属性设置为无效值时,应该如何返回验证错误消息?

[英]I'm building an API/Framework in C#, how should I return validation error messages when properties are set to an invalid value?

我正在C#中构建API,当属性设置为无效值时,如何返回验证错误消息? 我应该抛出异常还是做其他事情? 您有什么推荐的吗? 我可以使用Task Parallel Library中的AggregateException类,这样一次可以抛出一个以上的异常。 最佳做法是什么?

最好的方法是在每个属性设置器中将其设置为无效值时抛出ArgumentException

我会说这取决于财产。 另一位发布者推荐了ArgumentException,但我认为这更特定于传递给方法的无效参数。 我可能会创建自己的异常(继承ApplicationExecption),并使它们特定于我的属性,例如:

PropertyNumericRangeException(可以说0到100的数值属性)

PropertyStringLengthException(限制字符串长度)

我想您也可以为此目的扩展AggregateException,但是这里的天空几乎是极限。

使用诸如企业库验证应用程序块之类的验证框架,也可以创建自己的验证框架。 无需为每个验证错误引发异常,而是报告具有单个异常的所有错误。

如果使用的是.NET的较新版本,尤其是如果要使用WPF / Silverlight,则实现IDataErrorInfo可能是一个更好的解决方案。 Karl Shiflett写了一篇很好的文章,介绍了在属性设置器中引发异常与实现IDataErrorInfo的优缺点

如果您具有依赖于一个或多个属性值的验证规则,则开发人员现在将必须编写代码以一定顺序设置属性值,以免引发异常。 这是一个疯狂的要求,与所有.NET类设计文档相反。 您能否想象必须包装使用try catch块设置属性的每段代码。 同样,那些试图填充对象和不必要异常的LINQ查询又被属性设置器抛出了。 这使得编写可维护的代码变得更加困难,并且投资回报为零。 当代码随时间变化时,添加了一个字段,我们必须考虑无用的异常处理,并且要知道调用或更改属性设置器的顺序。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM