如何使用 LINQ 在 ASP.NET Core 中从 ModelState 获取充满 ErrorMessages 的 IEnumerable
How to get IEnumerable filled with ErrorMessages from ModelState in ASP.NET Core with LINQ
我有以下 C# 扩展:
public static class ModelStateHelper
{
public static IEnumerable Errors(this ModelStateDictionary modelState)
{
if (!modelState.IsValid)
{
return modelState.ToDictionary(kvp => kvp.Key,
kvp => kvp.Value.Errors
.Select(e => e.ErrorMessage).ToArray())
.Where(m => m.Value.Any());
}
return null;
}
}
从控制器调用此扩展以生成 JSON 并生成以下 JSON:
{
"error": [
{
"key": "Password",
"value": [
"The Password field is required."
]
},
{
"key": "Username",
"value": [
"The Username field is required."
]
}
]
}
如何将此扩展方法修改为 return 只是一个错误消息列表?像这样:
{
"error": [
"The Password field is required.",
"The Username field is required."
]
}
也许这样的代码可行:
public static class ModelStateHelper
{
public static IEnumerable Errors(this ModelStateDictionary modelState)
{
if (!modelState.IsValid)
{
return modelState.Errors();
}
return null;
}
}
首先,请不要将您的扩展程序命名为 class "FooHelper",因为 Helper 毫无意义。因为这是你的 ModelStateExtenstions
让我们这样称呼它。你也想得到 IEnumerable<string>
所以 return 那样。
下面是代码:
public static class ModelStateExtenstions
{
public static IEnumerable<string> GetErrorMessages(this ModelStateDictionary modelState)
{
if (!modelState.IsValid)
{
return modelState.ToDictionary(kvp => kvp.Key, kvp => kvp.Value)
.Select(e => String.Join(" ", e.Value.Errors.Select(x => x.ErrorMessage)));
}
return Enumerable.Empty<string>();
}
}
由于一个 属性 可以有多个错误消息,我决定用空的 space 加入它们。希望对您有所帮助。
并通过使用 SelectMany :
var allErrors = ModelState.Values.SelectMany(v => v.Errors).Select(x=>x.ErrorMessage).ToList();
分机:
public static class ModelStateHelper
{
public static List<string> Errors(this ModelStateDictionary modelState)
{
if (!modelState.IsValid)
{
return ModelState.Values.SelectMany(v => v.Errors).Select(x=>x.ErrorMessage).ToList();
}
return new List<string>();
}
}
我有以下 C# 扩展:
public static class ModelStateHelper
{
public static IEnumerable Errors(this ModelStateDictionary modelState)
{
if (!modelState.IsValid)
{
return modelState.ToDictionary(kvp => kvp.Key,
kvp => kvp.Value.Errors
.Select(e => e.ErrorMessage).ToArray())
.Where(m => m.Value.Any());
}
return null;
}
}
从控制器调用此扩展以生成 JSON 并生成以下 JSON:
{
"error": [
{
"key": "Password",
"value": [
"The Password field is required."
]
},
{
"key": "Username",
"value": [
"The Username field is required."
]
}
]
}
如何将此扩展方法修改为 return 只是一个错误消息列表?像这样:
{
"error": [
"The Password field is required.",
"The Username field is required."
]
}
也许这样的代码可行:
public static class ModelStateHelper
{
public static IEnumerable Errors(this ModelStateDictionary modelState)
{
if (!modelState.IsValid)
{
return modelState.Errors();
}
return null;
}
}
首先,请不要将您的扩展程序命名为 class "FooHelper",因为 Helper 毫无意义。因为这是你的 ModelStateExtenstions
让我们这样称呼它。你也想得到 IEnumerable<string>
所以 return 那样。
下面是代码:
public static class ModelStateExtenstions
{
public static IEnumerable<string> GetErrorMessages(this ModelStateDictionary modelState)
{
if (!modelState.IsValid)
{
return modelState.ToDictionary(kvp => kvp.Key, kvp => kvp.Value)
.Select(e => String.Join(" ", e.Value.Errors.Select(x => x.ErrorMessage)));
}
return Enumerable.Empty<string>();
}
}
由于一个 属性 可以有多个错误消息,我决定用空的 space 加入它们。希望对您有所帮助。
并通过使用 SelectMany :
var allErrors = ModelState.Values.SelectMany(v => v.Errors).Select(x=>x.ErrorMessage).ToList();
分机:
public static class ModelStateHelper
{
public static List<string> Errors(this ModelStateDictionary modelState)
{
if (!modelState.IsValid)
{
return ModelState.Values.SelectMany(v => v.Errors).Select(x=>x.ErrorMessage).ToList();
}
return new List<string>();
}
}