在我的ASP.NET MVC API应用程序中,如果缺少一些必需字段,我可以返回一个有用的ErrorResponse:
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可能有一种方法可以为我做这个.
解决方法
你使用的是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);