我正在使用MVC控制器开发REST API.我想处理所有模型绑定错误,并以用户友好的方式将它们报告给客户端.在我的自定义模型绑定器中,我已经抛出了一个异常处理程序被认为是安全的特殊异常并显示给客户端.
但是,当默认模型绑定器看到无效值(例如,int的asdf)时,它似乎完全忽略它(如果参数不是必需的)或抛出一个普通的ArgumentException(如果需要参数).是否可以可靠地处理这两种情况并获取参数名称和相关错误,而无需手动重写整个活页夹?
我宁愿不显示ArgumentException,因为它显示了客户端不应该关心的方法和命名空间名称.如果它是可以避免的,我也不会解析ArgumentException消息,并且这不能解决完全忽略非必需参数的无效值的问题.
解决方法
您可以在模型上实现IValidatableObject接口.在那里,您可以创建自己的验证逻辑,替换当前具有的必需属性验证.
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类.