【发布时间】:2018-09-07 18:16:38
【问题描述】:
很抱歉,如果这个问题已经被问及回答了一百万次,但我似乎无法在 Google 或 SO 上找到解决方案。
在 ASP.NET Core 中,是否可以编写自定义模型绑定器或类似的东西,这将允许我在 Web API 中获得一些继承支持?
基本上我有这样的课程:
public class Order {
public Guid Id { get; set; }
public PaymentContainer PaymentParameters { get; set; }
}
还有一个容器类
public class PaymentContainer
{
public string Type { get; set; }
public IPaymentParameters Value { get; set; }
}
还有一些实现IPaymentParameters接口的类,以及控制器方法如:
[HttpPost]
public IActionResult CreateOrder([FromBody]Order order)
{
}
我非常希望客户端能够以 json 格式发送,例如:
{
"id" : "1234-..-1234",
"paymentParameters" : {
"type": "SpecialParameters1",
"value" : { /* instance of specialparameters1 here */ }
}
}
然后让“value”属性成为“SpecialParameters1”的一个实例,一旦它到达控制器方法。
我认为可以编写一个模型绑定器,但我无法完全理解它是如何完成的。
注意:我知道可以更改 Json.Net TypeNameHandling 的方法,但我不想弄乱所有其他依赖 json 序列化程序的东西,而只是设置它到 Auto 或 All 将为远程代码执行开辟一些途径。
澄清:第一次回答后的小更新 目标是拥有多个参数实例,以便以下输入也“有效”
{
"id" : "1234-..-1234",
"paymentParameters" : {
"type": "SpecialParameters2",
"value" : { /* instance of specialparameters2 here */ }
}
}
当然我也会上课
public class SpecialParameters1 : IPaymentParameters{}
public class SpecialParameters2 : IPaymentParameters{}
【问题讨论】:
-
对任何类型的歧视说不! :D
-
这对@Esben Bach 有帮助吗? docs.microsoft.com/en-us/aspnet/core/mvc/advanced/…
-
好吧,我尝试编写自己的活页夹,但我似乎无法弄清楚我究竟需要做什么才能得到我想要的结果。
标签: c# asp.net-core