特殊字符导致ValidationAttribute.FormatErrorMessage报格式错误如何修复
根因分析
ValidationAttribute.FormatErrorMessage 方法底层依赖 string.Format() 处理错误信息,string.Format() 会默认把 {、} 识别为格式化占位符的边界标识。你使用的错误信息中包含未转义的 {} 字符,不符合 string.Format() 的格式要求,因此抛出格式错误。
修复方案
方案1:直接转义错误信息中的花括号
把错误信息里的单个左花括号 { 替换为两个左花括号 {{,单个右花括号 } 替换为两个右花括号 }} 即可,修改后的错误信息如下:
ErrorMessage = @"Your characters should be in: ^_{{}}~";
转义后的花括号会被 string.Format() 识别为普通文本,不会再触发占位符解析逻辑。
方案2:调用格式化方法前动态转义
如果不希望修改原始错误信息的存储内容,可以在调用 FormatErrorMessage 前先对错误信息做转义处理:
// 转义错误信息中的花括号 ErrorMessage = ErrorMessage.Replace("{", "{{").Replace("}", "}}"); // 再执行格式化 string formattedError = FormatErrorMessage(GetDisplayName());
方案3:跳过FormatErrorMessage调用
如果你的错误信息不需要用到内置的占位符替换逻辑,完全可以直接拼接错误信息,避免触发 string.Format 的解析逻辑:
string displayName = GetDisplayName(); string formattedError = $"{displayName} {ErrorMessage}";
内容的提问来源于stack exchange,提问作者Ashok Yaganti
相关产品推荐
相关产品推荐

