我遇到了一个问题,我正在尝试确定哪个ValidationAttribute返回了特定的ModelError。我的web api中有一个端点,它采用了一个模型,如;
public class MyClass
{
[Required]
[Range(0, 3)]
public int? Number { get; set; }
[Required]
[Range(0, 3)]
public int? NumberTwo { get; set; }
}
以及用于检查ModelState是否有效的过滤器;
public class ValidateModelAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(HttpActionContext actionContext)
{
if (!actionContext.ModelState.IsValid)
{
IEnumerable<ModelError> errors = actionContext.ModelState.Values.SelectMany(s => s.Errors);
// ...
}
}
}
我看到ModelError有两个属性; ErrorMessage是string类型,Exception是Exception类型。我想要一种强类型的方法来确定哪个ValidationAttribute [Required]或[Range(0,3)]返回错误响应而不进行字符串操作。有没有办法使用我不熟悉的这些属性返回自定义属性?
如果客户要发布
等模型{
"NumberTwo":10
}
最终目标是从API生成响应,如下所示;
{
"supportCode" : "1234567890",
"errors" : [{
"code" : "Missing",
"message" : "The Number field is required."
}, {
"code" : "Invalid",
"message" : "The field NumberTwo must be between 0 and 3."
}]
}
答案 0 :(得分:0)
如果您编写自己的验证例程而不是使用内置于MVC中的验证例程,则可以。您需要对每个属性使用反射,然后对每个属性的每个验证属性使用。