Jon*_*han 8 asp.net-mvc asp.net-mvc-3
在我的ASP.NET MVC API应用程序中,ErrorResponse如果我的一些Required字段丢失,我可以返回一个有用的内容:
return Request.CreateErrorResponse(HttpStatusCode.BadRequest, ModelState);
Run Code Online (Sandbox Code Playgroud)
-
"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."
]
}
Run Code Online (Sandbox Code Playgroud)
但是,正如这个答案所证实的那样,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);
}
Run Code Online (Sandbox Code Playgroud)
如果您正在使用 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);
Run Code Online (Sandbox Code Playgroud)