如何遍历存储多条验证错误的字符串 为每条错误单独打印日志
问题原因分析
- 第一段代码的核心问题是:
validationErrors是通过string.Join拼接得到的单个字符串类型变量,对字符串做foreach遍历会枚举其中的每一个字符,自然只会打印单个字符。 - 你后续给出的遍历
ModelState.Values的写法不符合需求,存在两个问题:- 直接将
Select返回的IEnumerable<string>类型传入LogError,日志只会输出集合的类型名,不会打印具体错误内容 - 单个
ModelState条目可能包含多条错误,你没有遍历对应条目下的Errors集合,无法实现每条错误单独生成日志的要求
- 直接将
正确实现代码
你可以先把所有错误信息提取到独立列表,再分别做日志打印和异常拼接操作:
// 第一步:提取所有错误消息存入列表 var allErrors = ModelState.Values .Where(e => e.Errors.Count > 0) .SelectMany(e => e.Errors) .Select(e => e.ErrorMessage) .ToList(); // 第二步:遍历列表单独打印每条错误 foreach (var errorMsg in allErrors) { _logger.LogError(errorMsg); } // 第三步:拼接成单个字符串用于抛出异常 string validationErrors = string.Join(", ", allErrors); throw new Exception(validationErrors);
内容的提问来源于stack exchange,提问作者MarkCo
相关产品推荐
相关产品推荐

