在空模型的情况下返回错误响应

时间:2013-08-14 15:22:39

标签: asp.net-mvc asp.net-mvc-3

在我的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可能有一种方法可以为我做这个。

1 个答案:

答案 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);