ASP.NET Core MVC - 包含使用接口的属性的绑定模型

时间:2017-07-18 21:44:10

标签: asp.net-core-mvc asp.net-core-1.1

我有一个包含基于接口的属性的模型,具体实现可以通过模型的另一个属性发现。

public class SubscriptionViewModel
{
    public Guid Id { get; set; }
    ...
    public SubscriptionTypeEnum SubscriptionType { get; set; } // <- Determines the concrete class
    public ISubscriptionCriteria SubscriptionCriteria { get; set; } //<- Property based on interface class
    ...
}

当存在基于接口的属性时,控制器中的模型将为null。如果删除,一切都会按预期结束。

[HttpPost("api/[controller]/[action]")]
public async Task Post([FromBody]SubscriptionViewModel model)
{
    ...
}

这是因为控制器不知道用于接口的实体实现。

我有什么想法可以解决这个问题?看起来这可能是使用自定义IModelBinderProviderBindingBehaviorAttribute

实现的

我想我可以有SuperSubscriptionCriteria实现,其中包含ISubscriptionCriteria的具体实现所使用的所有可能属性,然后依靠AutoMapper将它们转换为实际实现。但这似乎是一种黑客攻击,并且随着新ISubscriptionCriteria实施的添加需要持续维护。

0 个答案:

没有答案