Sah*_*rma 1 c# json fluentvalidation asp.net-web-api
我有一个C#WebApi项目,并且正在使用FluentValidation.WebApi包来验证客户端输入。
下面是我的模型类代码,它具有名为“ IsPremium”的C#属性。对于所有客户端,此属性均具有json名称“ isLuxury”。
[Serializable, JsonObject, Validator(typeof(ProductValidator))]
public class Product
{
[JsonProperty("isLuxury")]
public bool? IsPremium { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我的验证器类如下所示:
public class ProductValidator : AbstractValidator<Product>
{
public ProductValidator()
{
RuleFor(product => product.isPremium).NotNull();
}
}
Run Code Online (Sandbox Code Playgroud)
所以对于这样的请求: http:// localhost:52664 / api / product
请求正文:{“ isLuxury”:“”}
我收到以下错误:
{
"Message": "The request is invalid.",
"ModelState": {
"product.isPremium": [
"'is Premium' must not be empty."
]
}
}
Run Code Online (Sandbox Code Playgroud)
流利的选择了C#属性名称,这对客户端没有意义,因为它知道它是“ isLuxury”。如何强制Fluent从json属性而不是c#属性中选择名称,以提供更好的验证,例如“'isLuxury'不能为空。”?
如果不可能的话,我将不得不重命名我所有的C#属性,使其具有与公开给所有客户端的json相同的名称。请提出您是否还有其他更好的方法来解决此问题。
使用OverridePropertyName方法修改验证器类
public class ProductValidator : AbstractValidator<Product>
{
public ProductValidator()
{
RuleFor(product => product.isPremium).NotNull().OverridePropertyName("isLuxury");
}
}
Run Code Online (Sandbox Code Playgroud)
引用:https : //github.com/JeremySkinner/FluentValidation/wiki/d.-Configuring-a-Validator#overriding-the-default-property-name
或者,您可以调用WithName执行类似操作的方法。如果您想完全重命名该属性,则可以使用该OverridePropertyName方法。
| 归档时间: |
|
| 查看次数: |
2620 次 |
| 最近记录: |