从 ModelStateDictionary 获取键和错误

问题描述 投票:0回答:2

如何从 ModelStateDictionary 获取键和错误?我有这段代码,但它执行了太多次,它给我带来了重复的关键错误。

    if (!modelstate.IsValid)
    {
        var errMessages = new Dictionary<string, string>();
        foreach (var item in modelstate.Keys)
        {
            foreach (var item2 in modelstate.Values)
            {
                foreach (var item3 in item2.Errors)
                {
                    errMessages.Add(item.ToLower(), item3.ErrorMessage);
                }
            }
        }
        return new Error { StatusCode = 409, ErrorMessages = errMessages };
    }

感谢您的所有回答,祝您有美好的一天:D。

list validation modelstate
2个回答
1
投票

我设法解决了这个问题,但是如果有人有更好的建议,我想阅读它。

if (!modelstate.IsValid)
        {
            var errMessages = new Dictionary<string, string>();
            var i = 0;
            foreach (var item2 in modelstate.Values.SelectMany(p => p.Errors))
            {
                var key = modelstate.Keys.ToArray();
                errMessages.Add(key[i].ToLower(), item2.ErrorMessage);
                i++;
            }
            return new Error { StatusCode = 409, ErrorMessages = errMessages };
        }

0
投票

由于 modelstate 已经是字典,为什么不这样做:

if (!ModelState.IsValid)
{
    var errorMessages = ModelState
        .Where(ms => ms.Value.Errors.Any())
        .ToDictionary(
            kvp => kvp.Key.ToLower(),
            kvp => string.Join("; ", kvp.Value.Errors.Select(e => e.ErrorMessage))
        );

    return new Error 
    { 
        StatusCode = 409, 
        ErrorMessages = errorMessages 
    };
}
© www.soinside.com 2019 - 2024. All rights reserved.