WebAPI单端点接受许多派生类型

时间:2018-03-30 22:40:28

标签: c# asp.net-core-webapi

我正在开发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)。最好,我希望框架能够处理派生类型的验证。

这可能吗?

0 个答案:

没有答案