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

时间:2018-08-13 14:23:36

标签: c# asp.net-web-api error-handling data-annotations modelstate

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

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

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

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

型号

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中找不到必需的属性'ExampleProperty'。路径[...]”
  • 但是ErrorMessage为空。

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

1 个答案:

答案 0 :(得分:0)

尝试使用此:

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并显示错误消息