抛出本地化的验证异常

本文关键字:验证 异常 本地化 | 更新日期: 2023-09-27 18:35:18

我正在创建一个自定义属性验证,该验证在抛出 ValidationException 时应使用指定资源文件中的错误字符串。我假设如果我抛出异常并且没有在参数中指定错误字符串,它应该使用我在构造函数中指定的错误消息资源名称和错误消息资源类型是否正确?

using System;
using System.ComponentModel.DataAnnotations;
using System.Text.RegularExpressions;
namespace OurProduct.Util
{
    [AttributeUsage(AttributeTargets.Field | AttributeTargets.Property, AllowMultiple = false, Inherited = true)]
    public class UniquenessAttribute : ValidationAttribute
    {
        public UniquenessAttribute()
        {
            ErrorMessageResourceName = "EmailUniqueError";
            ErrorMessageResourceType = typeof (Resources.OurThing);
        }
        protected override ValidationResult IsValid(object value)
        {
            throw new ValidationException();
        }
    }
}

抛出本地化的验证异常

如果OurThing指向生成的强类型资源类,则以下内容应该可以查找本地化字符串等,并且"EmailUniqueError"是此类的静态属性之一:

    public class UniquenessAttribute : ValidationAttribute
    {
        public UniquenessAttribute()
        {
            ErrorMessageResourceName = "EmailUniqueError";
            ErrorMessageResourceType = typeof (Resources.OurThing);
        }
        protected override ValidationResult IsValid(object value, ValidationContext validationContext)
        {
            if (failure) // to implement
                return new ValidationResult(FormatErrorMessage(validationContext.DisplayName));
            ...
        }
    }

还要确保在执行测试时验证所有属性(例如,如果使用 TryValidateObject,请确保最后一个参数设置为 true)。