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自定义模型绑定复杂的抽象对象
- 处理Odata / entityset / key / navigation
- GROUP BY / Case Asp.Net Web API ODATA的不敏感扩展?
- 使用Postman上传ASP核心WebApi测试文件
- .NET Core – 尝试将存储库添加到我的API控制器,但是当我执行每个控制器方法时都会返回500错误
- 在c#中手动解码OAuth承载令牌
- 具有默认值的Asp.net webapi枚举参数
- Web Api Controller在其他项目中,路由属性不起作用
- ASP身份2 + Web API令牌身份validation – 持久声明未加载
- HttpRequestMessage.GetClientCertificate()在Web API中返回null