可靠地处理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类。

链接地址: http://www.djcxy.com/p/9997.html

上一篇: Reliably handle ASP.NET MVC model binding errors

下一篇: Calculating expressions modulo n