我正在使用MVC控制器开发REST API。我想处理所有模型绑定错误,并以用户友好的方式将它们报告给客户端。在我的自定义模型绑定器中,我已经抛出了一个异常处理程序认为是安全的特殊异常,并向客户端显示。
但是,当默认模型绑定器看到无效值(例如asdf
的{{1}})时,它似乎完全忽略它(如果参数不是必需的)或者抛出普通int
(如果需要参数)。是否可以可靠地处理这两种情况并获取参数名称和相关错误,而无需手动重写整个活页夹?
我不希望显示ArgumentException
因为它显示了客户端不应该关心的方法和命名空间名称。如果可以避免,我也不会解析ArgumentException
消息,并且无法完全忽略非必需参数的无效值。
答案 0 :(得分:3)
您可以在模型上实现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类。