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

如何在.NET ValidateDataAnnotations中简化IOptions验证错误消息

解决方案

默认的ValidateDataAnnotations()生成的错误消息格式是固定的,没有直接配置项可以移除前缀。不过可以通过两种方式实现你要的效果:

一、自定义验证逻辑(推荐)

替换原有的ValidateDataAnnotations(),手动执行数据注解验证并构造自定义的错误消息:

services.AddOptions<ConnectionOptions>()
    .Bind(Configuration.GetSection("ConnectionStrings"))
    .Validate(options =>
    {
        var validationContext = new ValidationContext(options);
        var validationResults = new List<ValidationResult>();
        bool isValid = Validator.TryValidateObject(
            options, 
            validationContext, 
            validationResults, 
            validateAllProperties: true
        );

        if (!isValid)
        {
            // 仅提取我们定义的错误消息
            var errorMessages = validationResults.Select(r => r.ErrorMessage);
            throw new OptionsValidationException(
                typeof(ConnectionOptions).FullName, 
                typeof(ConnectionOptions), 
                errorMessages
            );
        }

        return isValid;
    });

这样抛出的OptionsValidationException的Failures集合中,就只会包含你定义的Field Connection is required,不会有额外前缀。

二、捕获异常后处理(正则截取)

如果不想修改验证逻辑,也可以在捕获异常时用正则提取目标消息:

try
{
    var options = serviceProvider.GetRequiredService<IOptions<ConnectionOptions>>().Value;
}
catch (OptionsValidationException ex)
{
    var cleanErrors = ex.Failures.Select(f => 
        System.Text.RegularExpressions.Regex.Match(f, @"Field .+ is required").Value);
    // 处理清理后的错误消息
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 20:03:20