相关疑难解决方法(0)

Web Api模型绑定和多态继承

我问是否有人知道是否有可能将一个继承自抽象类的具体类传递给Web Api.

例如:

public abstract class A{
    A();
}

public class B : A{

}

[POST("api/Request/{a}")]
public class Request(A a)
{
}
Run Code Online (Sandbox Code Playgroud)

目前我已经环顾四周,大多数解决方案似乎都说使用TypeNameHandling会起作用.

JsonMediaTypeFormatter jsonFormatter = new JsonMediaTypeFormatter();
            jsonFormatter.SerializerSettings.TypeNameHandling = TypeNameHandling.Auto;
Run Code Online (Sandbox Code Playgroud)

然而,事实并非如此.我的模型也从控制台应用程序传递到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;
Run Code Online (Sandbox Code Playgroud)

调用webapi操作时,对象为null

c# json json.net asp.net-web-api

20
推荐指数
1
解决办法
9698
查看次数

标签 统计

asp.net-web-api ×1

c# ×1

json ×1

json.net ×1