【发布时间】:2017-03-09 12:02:46
【问题描述】:
我有一个 Asp.Net Core REST 服务,并且正在使用内置验证。我需要一些额外的功能,所以我找到了一些我需要的验证属性示例,所以这里是我模型的一小部分:
[RequiredIfEmpty("B")]
[RequiredIfEmpty("C")]
public string A { get; set; }
public string B { get; set; }
public string C { get; set; }
所以,很明显我要做什么。如果 B 或 C 为空,我想验证是否指定了 A。
当我发送一个验证失败的 JSON 请求时,我只会得到:
"A is required when B is empty."
我希望得到:
"A is required when B is empty."
"A is required when C is empty."
因此,验证代码似乎根据类型对属性进行了区分,因为它忽略了第二个。如果我这样做,这将得到进一步证明:
[RequiredIfEmpty("B")]
[RequiredIfEmpty2("C")]
public string A { get; set; }
public string B { get; set; }
public string C { get; set; }
RequiredIfEmpty2 只是从RequiredIfEmpty 派生而来,没有额外的代码。现在我得到了预期:
"A is required when B is empty."
"A is required when C is empty."
在这个例子中,我只有 2 个依赖属性,所以创建 2 个版本没什么大不了的,但它非常 hacky,我不喜欢它。
我曾考虑将RequiredIfEmpty 属性更改为获取属性的字符串[],但看起来MVC 基础结构不允许单个属性返回多个错误字符串。
我确实向 Microsoft 报告了它,但想知道除了 2 版本之外是否还有其他人可以想到解决方法?
【问题讨论】:
标签: c# asp.net-mvc validation asp.net-core