我的数据有以下代码
public class PersonDto
{
public string name ;
public DateTime dateOfBirth;
}
现在我有了控制器来保存数据。
假设我没有填写dateOfBirth
,它将产生一个错误
[HttpPost("create")]
public async Task<IActionResult> CreateClient([FromBody] PersonDto cpDto)
{
if (!ModelState.IsValid)
{
var errors = ModelState.Values.SelectMany(v => v.Errors);
var message = string.Join(" | ", ModelState.Values
.SelectMany(v => v.Errors)
.Select(e => e.ErrorMessage));
Console.WriteLine(message);
return BadRequest(message);
}
......... (other code)
}
假设我没有输入dateOfBirth
,它应该会产生错误提示。
我的问题是,当我保存错误消息时会生成,但似乎ErrorMessage
总是空字符串==> (" | ")
如果我进入调试模式,我可以看到哪些字段产生了错误,但是我不知道如何显示哪些字段产生了错误(只是收到无效字段错误消息)。
我尝试过
return BadRequest(ModelState);
它也不会显示哪个字段导致了错误。
注意:我在.NET Core 2.2中使用C#
答案 0 :(得分:1)
要获取所有错误消息及其相应的字段:
var errors = ModelState
.Where(kv => kv.Value.Errors.Any())
.Select(kv => new
{
Field = kv.Key,
ErrorMessages = kv.Value.Errors.Select(e => e.ErrorMessage),
});
errors
将是一个包含所有错误的列表,并带有Field
和ErrorMessages
的匿名对象,如果您想获得一个包含错误域的字符串:>
var errorsString = string.Join(" | ", errors
.Select(e => $"Field: {e.Field}, Error: {string.Join(", ", e.ErrorMessages)}"));
答案 1 :(得分:0)
尝试一下:
var messages = ModelState
.Where(x => x.Value.Errors.Count > 0)
.ToDictionary(
kvp => kvp.Key,
kvp => kvp.Value.Errors.Select(e => e.ErrorMessage).ToArray()
);
将dto更改为:
public class PersonDto
{
[Required(ErrorMessage = "Please enter name")]
public string name { get; set; }
[Required(ErrorMessage = "Please enter date")]
public DateTime dateOfBirth { get; set; }
}