8

在我的 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."
            ]
        }

然而,正如这个答案所证实的,一个 NULL 模型被验证。由于我不允许这样做,我怎样才能返回一个同样有用的错误响应,说明所有需要的值?我知道我可以为每个属性手动添加一个 ModelError,但我怀疑可能有一种方法CreateErrorResponse可以为我做到这一点。

4

1 回答 1

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);
于 2013-08-21T23:20:06.017 回答