You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET Framework升级FluentValidation后抛InvalidCastException如何解决?

解决FluentValidation v11升级后的InvalidCastException错误

你这段代码的核心错误是错误地将IValidator实例强制转换为IValidationContext,这两个接口在FluentValidation v11中是完全独立的类型,不存在继承或隐式转换关系,因此抛出类型转换异常。在v8版本中可能存在兼容逻辑,但v11重构了接口设计,移除了这种兼容,导致原有代码失效。

正确的做法是基于待验证的entity创建合法的IValidationContext实例,再传递给IValidator.Validate方法。修改后的代码如下:

public static class Utility
{
    public static void Validate(IValidator validator, object entity)
    {
        // 基于待验证实体创建ValidationContext
        var validationContext = new ValidationContext<object>(entity);
        var result = validator.Validate(validationContext);

        if (result.Errors.Count > 0)
        {
            throw new ValidationException(result.Errors);
        }
    }
}

补充说明:

  • 如果你的IValidator是泛型的IValidator<T>,可以创建对应泛型的ValidationContext<T>,类型匹配会更严谨;但当前方法参数使用非泛型IValidator和object,用ValidationContext<object>可以保证兼容性。
  • FluentValidation v11中,Validate方法的参数必须是合法的IValidationContext实现(通常为ValidationContext<T>),不再支持将IValidator自身作为上下文传入。

内容的提问来源于stack exchange,提问作者Sercan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 00:27:06