我正在尝试使用模型状态来验证对我的WebAPI的请求,但是我在如何控制某些属性的错误消息方面遇到了一些麻烦。例如,给定以下模型
public class Stuff {
[Range(0, Double.PositiveInfinity)]
public double? SomeProp { get; set; }
}
(以及在帖子底部定义的一些基础结构)具有有效负载的请求(例如{ someProp: "1.2" }
)将正确建模绑定 - 负值或缺失值将产生错误 - 但是如果我输入的内容不是有效数字(例如{ someProp: "hello" }
)模型状态有错误,例如
将值“hello”转换为类型'System.Nullable`1 [System.Double]'时出错。路径'someStuff',第1行,第41位。
(我猜这个位置在JSON对象中,这里是一个更大的请求,所以不要介意确切的数字......)。对于另一个不可为空但又具有 我明白为什么 字段SomeProp必须与正则表达式'< my regex>'匹配。 有没有办法解决这个问题,以便在输入非数字的东西时,我可以给用户提供更好的错误信息到应该指定数值的文本框? [Required]
属性的属性,除了上述消息之外,模型状态字典中还包含有关缺少必需属性的错误消息。 / p>
"hello"
无法绑定到double?
(或double
),但无论我在属性中设置的约束如何,似乎该值必须是模型绑定的甚至在它们被检查之前,如果模型绑定失败,我都会得到上面那个不那么友好的消息,以及在取消设置值时应用的所有其他错误。在尝试绑定值之前,我能够应用的唯一约束是Regex,但如果失败,我会收到类似用户不友好的消息,如
脚注:我的验证基础设施
[HttpPost]
[Validate]
public IHttpActionResult Validate(Stuff stuff) {
return Ok();
}
Validate
属性的定义如下:public class ValidationAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(HttpActionContext actionContext)
{
if (!actionContext.ModelState.IsValid)
{
actionContext.Response = actionContext.Request
.CreateErrorResponse(HttpStatusCode.BadRequest, actionContext.ModelState);
}
}
}