代码之家  ›  专栏  ›  技术社区  ›  alex2k8

后缀.requireError、.FormatError等的用途是什么

  •  0
  • alex2k8  · 技术社区  · 15 年前

    在阅读Oxite源代码时,我发现验证器使用一些后缀(RequiredError、maxlenghthexceedError、invalideError、FormatError)保存错误的属性名

    validationState.Errors.Add(CreateValidationError(user.Name, "Name.RequiredError", "Name is not set"));
    
    validationState.Errors.Add(CreateValidationError(user.Name, "Name.MaxLengthExceededError", "Username must be less than or equal to {0} characters long.", 256));
    
    validationState.Errors.Add(CreateValidationError(user.Email, "Email.InvalidError", "Email is invalid."));
    

    谁的后缀的目的是什么?他们如何使用?

    1 回复  |  直到 15 年前
        1
  •  1
  •   Talljoe    15 年前

    我的猜测是,它们是恒定的、机器友好的值,可用于唯一标识错误,并可用于获取全球化站点的本地化资源。


        protected ValidationError CreateValidationError(
            object value, string validationKey, string validationMessage, 
            params object[] validationMessageParameters)
        {
            if (validationMessageParameters != null && 
                validationMessageParameters.Length > 0)
            {
                validationMessage = string.Format(
                  validationMessage, validationMessageParameters);
            }
    
            return new ValidationError(
                validationKey,
                value,
                new InvalidOperationException(
                  localize(validationKey, validationMessage))
                );
        }
    
        private string localize(string key, string defaultValue)
        {
            if (phrases == null)
                phrases = localizationService.GetTranslations();
    
            Phrase foundPhrase = phrases
              .Where(p => p.Key == key && p.Language == site.LanguageDefault)
              .FirstOrDefault();
    
            if (foundPhrase != null)
                return foundPhrase.Value;
    
            return defaultValue;
        }
    

    不过很奇怪。因为异常通常不应该本地化。

    推荐文章