我有一个如下广告模型:
public class AdModel
{
public int Id { get; set; }
public string Title { get; set; }
}
我也有很多派生类。
public class CarAdModel : AdModel
{
public int? Kilometer { get; set; }
}
我的Web Api Controller
就像:
public class AdController : ApiController
{
[HttpPost]
public async Task<IHttpActionResult> Post([FromBody] AdModel adModel)
{
//db insert
return Ok();
}
}
如果我从CarAdModel
应用发布了AngularJs
这样的派生对象,我只会获得属于AdModel
的属性,是否可以在Post
动作中获取派生对象?
答案 0 :(得分:1)
您需要为AdModel创建自定义绑定器或像这样创建常用绑定器,并为恢复目标类创建一些字段:
public class TypeModelBinder : DefaultModelBinder
{
protected override object CreateModel(ControllerContext controllerContext, ModelBindingContext bindingContext, Type modelType)
{
var typeValue = bindingContext.ValueProvider.GetValue(bindingContext.ModelName + ".ModelType");
var type = Type.GetType((string)typeValue.ConvertTo(typeof(string)), true);
var model = Activator.CreateInstance(type);
bindingContext.ModelMetadata = ModelMetadataProviders.Current.GetMetadataForType(() => model, type);
return model;
}
}
在我的示例模型中,字段&#34; ModelType&#34;包含类/
的完整类型名称