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

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可以为我做这个.

wal*_*wal 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);        
}
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)