我有一个 .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...");
}
}
}
任何想法可能导致这种情况吗?我做错了什么?
答案 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
并显示错误消息