我在问是否有人知道是否可以将继承自抽象类的具体类传递给 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 类,然后在发布到我的 webapi 之前将其传递给 ObjectContent
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;
当调用 webapi 操作时,对象为空