Web API动作中的模型验证

时间:2018-02-27 16:54:58

标签: c# asp.net-mvc asp.net-web-api

我有一个ASP.NET Web API方法,其模型需要后期绑定。对象的“类型”确定模型上属性的类类型。但是“类型”决定因素不在模型本身,它在我的数据库中。

public class MainModel
{
    public int Id { get; set; }
    public Object SubProperty { get; set; }
}

public class SubModelBase
{

}

public class SubModel1 : SubModelBase
{
    [Required]
    public string Name { get; set; }
}

public class SubModel2 : SubModelBase
{
    [Required]
    public string City { get; set; }
}

在上述模型中,SubProperty最终将成为SubModel1SubModel2等。

在我的行动中,我正在做以下事情:

[HttpPost]
public void Go(MainModel model)
{
    var obj = _db.GetObject(model.Id);
    SubModelBase subModel = null;
    if (obj.ObjectType == "sub-model-1")
    {
        var jObject = JObject.FromObject(model.SubProperty);
        subModel = jObject.ToObject<SubModel1>();
    }
    else if (obj.ObjectType == "sub-model-2")
    {
        var jObject = JObject.FromObject(model.SubProperty);
        subModel = jObject.ToObject<SubModel2>();
    }

    // TODO: Validate the sub object
}

我拥有具有数据注释标记的新模型后,如何触发模型验证呢?

1 个答案:

答案 0 :(得分:0)

我找到了答案。

在Web API操作方法中,我可以使用ApiController.Validate<T>()来验证我的新模型。

https://msdn.microsoft.com/en-us/library/dn573258%28v=vs.118%29.aspx

之后,我调用ModelState.IsValid来确定模型是否有效。

base.Validate(subModel);
if (!ModelState.IsValid)
{
    // ...
}