【问题标题】:Reliably handle ASP.NET MVC model binding errors可靠处理 ASP.NET MVC 模型绑定错误
【发布时间】:2011-12-31 02:05:15
【问题描述】:

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

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

我宁愿不按原样显示ArgumentException,因为它显示了客户端不必关心的方法和命名空间名称。如果可以避免,我也宁愿不解析 ArgumentException 消息,这不会解决完全忽略非必需参数的无效值的问题。

【问题讨论】:

  • 您有没有找到好的解决方案?我正在考虑装饰或继承IModelBinder,但我想知道是否有更好的方法。
  • @FabianSchmied:不幸的是没有。 “Web API”模型绑定器可能对这种情况有更好的支持——我不知道 ASP.NET Core。

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


【解决方案1】:

您可以在模型上实现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 类。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-07-08
    • 1970-01-01
    • 1970-01-01
    • 2018-08-13
    • 2010-09-16
    • 2018-02-27
    • 1970-01-01
    相关资源
    最近更新 更多