c# – Web Api模型绑定和多态继承

前端之家收集整理的这篇文章主要介绍了c# – 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;

当webapi操作被调用时,对象为null

解决方法

利亚姆指出,他的解决方案将无法在WebAPI中运行. WebAPI使用IModelBinder接口进行绑定,对于这些模型,ModelMetadataProviders将不存在.

我在这里提供了一个解决这个问题的办法;

WebAPI Custom Model binding of complex abstract object

原文链接:https://www.f2er.com/csharp/95729.html

猜你在找的C#相关文章