.Net Webapi 不显示所需属性的错误消息



我有一个.Net WebAPI项目,它从多个客户端接收数据对象并处理它们。

我想确保 JSON 消息确实包含所有必填字段。

为了确保这一点,我为所有必须由客户端设置的属性添加了一个Required属性(System.ComponentModel.DataAnnotations(。

当我检查ModelState.IsValid时,这工作正常,但现在我想抛出一个有用的BadRequest,它应该包含Required属性中设置的ErrorMessage

public class DataModel
{
[Required(ErrorMessage = "ExampleProperty is required!")]
public string ExampleProperty { get; set; }
}

控制器

public class DataController
{
public DataModel PostData(DataModel data)
{
if (ModelState.IsValid)
{
// This part is working fine..
return ProcessData(data);
}
else
{
// errs do only contain Exception.Messages not ErrorMessages..
string errs = string.Join(
"n",
ModelState.Values
.SelectMany(s => s.Errors)
.Select(e => string.IsNullOrWhiteSpace(e.ErrorMessage) ? (e.Exception != null ? e.Exception.Message : null) : e.ErrorMessage)
.Where(s => !string.IsNullOrWhiteSpace(s))
.GroupBy(g => g).Select(s => s.Key + " (#" + s.Count() + ")"));
throw new Exception("...todo: fill in correct text...");
}
}
}

ModelState.Values.First((。错误

  • 异常包含:"在 JSON 中找不到必需属性'示例属性'。路径 [...]">
  • 但是错误消息是空的。

任何想法可能导致这种情况?我做错了什么?

尝试使用这个:

public IHttpActionResult PostData(DataModel data)
{
if (ModelState.IsValid)
{
// This part is working fine..
return Ok(ProcessData(data));
}
else
{
// errs do only contain Exception.Messages not ErrorMessages..
string errs = ModelState.Select(x => x.Value.Errors)
.Where(y=>y.Count>0)
.ToList();
return Ok(errs);
}
}

如果请求的模型data有效,它将返回与您的模型的响应 如果模型无效,将返回带有错误消息的list of string

最新更新