Web Api模型绑定和多态继承

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Web Api模型绑定和多态继承相关的知识,希望对你有一定的参考价值。

我问是否有人知道是否有可能将一个继承自抽象类的具体类传递给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对象,在尝试了几次之后,我认为这不会起作用。

我已经研究过创建一个客户模型绑定器,但是我不想让我的应用程序变得更加复杂。目前我继承了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<A>(item, formatter);
var response = _client.PostAsync("api/Request", _content).Result;

当调用web api动作时,对象为null

以上是关于Web Api模型绑定和多态继承的主要内容,如果未能解决你的问题,请参考以下文章

四. Java继承和多态4. 多态和动态绑定

细说 Web API参数绑定和模型绑定

python学习8_1 面向对象(继承多态封装)以及零散概念(组合,property,绑定方法与非绑定方法,反射,内置函数)

回归python培训——类与对象继承多态和多态性封装绑定方法和非绑定方法反射

Java基础-- 继承 多态 泛型 接口 动态绑定 动态代理

Mixins多态绑定方法与非绑定方法