加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-15 06:23:49 所属栏目:百科 来源:网络整理
导读:我正在询问是否有人知道是否有可能将一个继承自抽象类的具体类传入Web Api. 例如: public abstract class A{ A();}public class B : A{}[POST("api/Request/{a}")]public class Request(A a){} 目前我已经环顾四周了,大多数解决方案似乎说使用TypeNameHandl
我正在询问是否有人知道是否有可能将一个继承自抽象类的具体类传入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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读