我有两个选择。
备选方案1:
只需创建一个新的扁平类
{Id, Foo, Bar}
用作动作方法的参数。然后可以将其映射到MyModel。这是我推荐的最易于维护的方法。
选项2:
自定义模型绑定,如下所示:
[ModelBinder(BinderType = typeof(MyModelBinder))]
public class MyModel
{
public string Id { get; set; }
[FromQuery]
public Info ComplexNestedProperty { get; set; }
}
public class AuthorEntityBinder : IModelBinder
{
public Task BindModelAsync(ModelBindingContext bindingContext)
{
var model = new MyModel
{
Id = bindingContext.ValueProvider.GetValue("id"),
ComplexNestedProperty = new Info
{
Foo = bindingContext.ValueProvider.GetValue("foo"),
Bar = bindingContext.ValueProvider.GetValue("bar")
}
};
bindingContext.Result = ModelBindingResult.Success(model);
return Task.CompletedTask;
}
}
作为对
选择2
您可以合理地编写一些反射,以获取嵌套模型的所有叶属性名称。