可靠地处理ASP.NET MVC模型绑定错误

时间:2011-11-17 07:02:36

标签: asp.net-mvc error-handling model-binding

我正在使用MVC控制器开发REST API。我想处理所有模型绑定错误,并以用户友好的方式将它们报告给客户端。在我的自定义模型绑定器中,我已经抛出了一个异常处理程序认为是安全的特殊异常,并向客户端显示。

但是,当默认模型绑定器看到无效值(例如asdf的{​​{1}})时,它似乎完全忽略它(如果参数不是必需的)或者抛出普通int(如果需要参数)。是否可以可靠地处理这两种情况并获取参数名称和相关错误,而无需手动重写整个活页夹?

我不希望显示ArgumentException因为它显示了客户端不应该关心的方法和命名空间名称。如果可以避免,我也不会解析ArgumentException消息,并且无法完全忽略非必需参数的无效值。

1 个答案:

答案 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类。