Ian*_*rds 20 c# json json.net asp.net-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
小智 -1
这可以通过默认模型绑定来实现。检查下面的方法。
public abstract class RequestBase
{
public int ID { get; set; }
}
public class MyRequest : RequestBase
{
public string Name { get; set; }
}
[RoutePrefix("api/home")]
public class HomeController : ApiController
{
[HttpPost]
[Route("GetName")]
public IHttpActionResult GetName([FromBody]MyRequest _request)
{
return Ok("Test");
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
9698 次 |
最近记录: |