我正在开发ASPNET核心WebAPI应用程序。我将有一个基本模型,并可能有许多很多派生类型的基本模型。我不想为这些派生类型中的每一个创建专门的端点。我想要做的是让我的控制器将传入的对象反序列化为基类型,将其传递给服务层,此时我可以确定它是哪种派生类型然后处理它。
例如,我的模型看起来像这样:
public class ModelA
{
public string PropA1 { get; set; }
public int PropA2 { get; set; }
}
public class ModelB : ModelA
{
public string PropB1 { get; set; }
public int PropB2 { get; set; }
}
public class ModelC : ModelA
{
public string PropC1 { get; set; }
public int PropC2 { get; set; }
}
控制器就是这样:
[Route("api/[controller]")]
public class MyController : Controller
{
[HttpPut]
public void Put(ModelA model)
{
// model could be B or C (but never A).
}
}
"模型"参数实际上可能是ModelC或ModelB(或者,实际上,许多其他参数,但绝不是基类)。然后,我将模型传递给服务提供者,然后服务提供者将确定派生类型并对其进行适当处理。
此外,每个派生类型都可以具有验证属性(和/或实现IValidatableObject)。最好,我希望框架能够处理派生类型的验证。
这可能吗?