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

ASP.NET Core中Fluent Validation的MessageFormatter及参数转换错误排查

解决Fluent Validation在ASP.NET Core 8中的两个错误

错误1:CS1503 无法将CancellationToken转换为ValidationContext

这个问题是调用校验方法时参数传递错误导致的,按场景修正:

  • 同步校验场景:调用Validate方法时,第一个参数必须是ValidationContext<T>对象,不能直接传CancellationToken。正确写法:
    var validator = new CreateAccountRequestDtoValidator();
    var context = new ValidationContext<CreateAccountRequestDto>(yourDtoInstance);
    var result = validator.Validate(context);
    
  • 异步校验场景:调用ValidateAsync方法,将CancellationToken作为第二个参数传入,示例:
    var validator = new CreateAccountRequestDtoValidator();
    var context = new ValidationContext<CreateAccountRequestDto>(yourDtoInstance);
    var result = await validator.ValidateAsync(context, cancellationToken);
    
    注意不要把CancellationToken直接作为第一个参数传给校验方法。

错误2:CS1061 CreateAccountRequestDto不存在MessageFormatter定义

MessageFormatter是Fluent Validation校验规则配置的专属对象,不属于你的CreateAccountRequestDto实体类,你大概率错误地在Dto实例上调用了它。正确用法是在CreateAccountRequestDtoValidator的规则配置中使用:

public class CreateAccountRequestDtoValidator : AbstractValidator<CreateAccountRequestDto>
{
    public CreateAccountRequestDtoValidator()
    {
        RuleFor(x => x.Email)
            .NotEmpty()
            .EmailAddress()
            // 直接用占位符
            .WithMessage("邮箱 {PropertyValue} 格式无效,请检查")
            // 或通过MessageFormatter自定义参数
            .WithMessage(ctx => ctx.MessageFormatter.AppendArgument("CustomTip", "需包含@符号").Build("邮箱 {CustomTip}"));
    }
}

所有MessageFormatter相关操作必须在Validator的规则配置中进行,不能直接在Dto对象上调用。

额外校验项

  • 确认已安装正确的NuGet包:FluentValidation.AspNetCore(适配ASP.NET Core场景)
  • 确保在Program.cs中注册Fluent Validation服务:
    builder.Services.AddFluentValidationAutoValidation()
                    .AddFluentValidationClientsideAdapters()
                    .AddValidatorsFromAssemblyContaining<CreateAccountRequestDtoValidator>();
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 16:32:36