在我的ASP.NET MVC API应用程序中,如果我的一些ErrorResponse
字段丢失,我可以返回一个有用的Required
:
return Request.CreateErrorResponse(HttpStatusCode.BadRequest, ModelState);
-
"Message": "The request is invalid.",
"ModelState": {
"myModel.FooA": [
"The FooA is required."
],
"myModel.FooC": [
"The FooC property is required."
],
"myModel.FooD": [
"The FooD property is required."
]
}
然而,当 this answer 确认时,NULL模型将验证。由于我不允许这样做,如何返回一个同样有用的错误响应,说明所有所需的值?我知道我可以为每个属性手动添加ModelError,但我怀疑CreateErrorResponse
可能有一种方法可以为我做这个。
答案 0 :(得分:3)
您使用的是mvc3还是web-api?你的标签表明你正在使用mvc,但你的开头句意味着web-api。如果使用mvc3,您可以使用以下内容:
在调用ModelState.IsValid之前,在控制器中添加:
if (modelObj == null)
{
ModelState.Clear();
var blankModel = new MyClass();
TryValidateModel(blankModel);
return View("About", blankModel);
}
如果您使用的是web-api 和,假设您使用的是System.ComponentModel.DataAnnotations
,则可以使用以下内容:
ModelState.Clear();
var model = new MyClass();
var results = new List<ValidationResult>();
Validator.TryValidateObject(model, new ValidationContext(model, null, null),
results, true);
var modelState = new ModelStateDictionary();
foreach (var validationResult in results)
modelState.AddModelError(validationResult.MemberNames.ToArray()[0],
validationResult.ErrorMessage);
return Request.CreateErrorResponse(HttpStatusCode.BadRequest, modelState);