【发布时间】:2015-07-30 14:21:24
【问题描述】:
当我的 API 的使用者尝试对客户进行更新时,我必须验证三件事。
在以下情况下阻止客户更新:
名字或姓氏为空
对于某个国家,如果客户的X内部集合为空,则抛出异常。 X 很难解释,所以假设它是一些集合。对于所有其他国家/地区,X 不适用 / 将始终为空。但如果是某个国家,则需要 X。所以它几乎是一个有条件的必需属性。一个客户属于一个国家,所以它是从发送的 JSON 中计算出来的。
如果数据库中的某些条件为真,则阻止更新客户。
所以基本上我遇到了以下问题,我想要一些关于最合适的解决方法的建议:
我是否创建一个操作过滤器来在保存之前对客户实体进行验证?或者创建从 ValidationAttribute 派生的自定义验证属性并覆盖 IsValid 成员函数会更好。
基本上是说的问题 if (first name is empty, if x, if y, etc) vs (!ModelState.IsValid)
然后使用 IsValid 使自定义属性起作用。
似乎验证属性最适合“简单”验证,即必填字段。但是,一旦您开始进入诸如“我需要查看我的数据库,或分析自定义值的 http 请求标头,并基于此,invalid = false”之类的事情,那么做这种事情如此接近似乎是错误的实体。
想法?
谢谢!
【问题讨论】:
标签: c# asp.net-web-api asp.net-web-api2 action-filter actionfilterattribute