可靠地处理ASP.NET MVC模型绑定错误
我正在开发一个使用MVC控制器的REST API。 我想处理所有模型绑定错误,并以用户友好的方式向客户报告。 在我的自定义模型绑定器中,我已经抛出了异常处理程序认为安全的特殊异常,并向客户端显示。
然而,当默认的模型联编程序看到一个无效值(比如, asdf
为一个int
)时,它似乎完全忽略它(如果该参数不是必需的)或抛出一个普通的ArgumentException
(如果该参数是必需的)。 是否可以可靠地处理这两种情况并获取参数名称和相关错误,而无需手动重写整个联编程序?
我宁愿不显示ArgumentException
,因为它揭示了客户端不应该关心的方法和名称空间名称。 如果可以避免的话,我也不会解析ArgumentException
消息,而且这样也无法解决完全忽略非必需参数的无效值的问题。
你可以在模型上实现IValidatableObject
接口。 在那里你可以创建你自己的验证逻辑,取代你当前拥有的Required
属性验证。
public class Model : IValidatableObject {
public int MyIntProperty { get; set; }
public IEnumerable<ValidationResult> Validate(ValidationContext validationContext) {
if (MyIntProperty == 0) {
yield return new ValidationResult("Please provide a valid value for MyIntProperty.", new[] { "MyIntProperty" });
}
}
}
在您的控制器中,您可以检查ModelState.Errors
集合以查看验证错误。 此外,如果您使用强类型视图和HTML表单助手,这将在客户端生成错误CSS类。