Web Api模型绑定和多态inheritance

我问是否有人知道是否有可能将一个inheritance自抽象类的具体类传递给Web Api。

例如:

public abstract class A{ A(); } public class B : A{ } [POST("api/Request/{a}")] public class Request(A a) { } 

目前我已经环顾四周,大多数解决方案似乎都说使用TypeNameHandling会起作用。

 JsonMediaTypeFormatter jsonFormatter = new JsonMediaTypeFormatter(); jsonFormatter.SerializerSettings.TypeNameHandling = TypeNameHandling.Auto; 

然而,事实并非如此。 我的模型也从控制台应用程序传递到webapi。 我已经读过,我可能能够反序列化json对象,在尝试了几次后,我认为这不会起作用。

我已经考虑过创建一个客户模型绑定器,但是我不想让我的应用程序变得更加复杂。 目前我inheritance了3个模型的抽象类,但将来可能会扩展它。 您可能会注意到添加自定义模型绑定器可能需要多个绑定器,除非有一种方法可以为所有类型的抽象类创建一个通用绑定器。

为了在我的控制台应用程序中进行扩展,我已经实例化了类b,然后将其传递给ObjectContent,然后发布到我的webapi

 item = B(); //serialize and post to web api MediaTypeFormatter formatter; JsonMediaTypeFormatter jsonFormatter = new JsonMediaTypeFormatter(); jsonFormatter.SerializerSettings.TypeNameHandling = TypeNameHandling.Auto; formatter = jsonFormatter; _content = new ObjectContent(item, formatter); var response = _client.PostAsync("api/Request", _content).Result; 

调用webapi操作时,对象为null

正如LiamK指出的那样,他的解决方案不适用于WebAPI。 WebAPI使用IModelBinder接口进行绑定,而ModelMetadataProviders不适用于这些模型。

我在这里为这个问题提供了一个解决方案;

WebAPI自定义模型绑定复杂的抽象对象