代码之家  ›  专栏  ›  技术社区  ›  Liam neesan

如何在Asp.Net核心6 web api中返回列表对象之一?

  •  0
  • Liam neesan  · 技术社区  · 2 年前

    我正在调用控制器API prodDetails ,它将只传递一个名为product-id的参数:

    [HttpGet("prodDetails")]
    public async Task<ActionResult<List<OneOfObject>>> GetProductDetails(string productID)
    {
        // get product type from SQL Server database 
        if (productType = 1)
        {
            List<ProdDetailsStandard> listStandard = new List<ProdDetailsStandard>();
            // add list
            return listStandard;
        }
    
        if (productType = 2)
        {
            List<ProdDetailsVariant> listVariant = new List<ProdDetailsVariant>();
            // add list
            return listVariant; 
        }
    
        if (productType = 3)
        {
            List<ProdDetailsFancy> listFancy = new List<ProdDetailsFancy>();
            // add list
            return listFancy; 
        }
    
    }
    

    我有几个列表对象,所以我想返回 List<Object> 基于产品类型。

    提前感谢

    0 回复  |  直到 2 年前
        1
  •  1
  •   Xinran Shen    2 年前

    我不知道你为什么不使用 Task<ActionResult<List<Object>>> 作为返回类型。你想要 Object 类型必须是中指定的类型之一( ProdDetailsStandard , ProdDetailsVariant , ProdDetailsFancy ……)?

    如果是,您可以创建一个基础对象,使所有返回类型扩展此基础对象

    public class IProdDetails{}
    
    public class ProdDetailsStandard : IProdDetails
    {
        //...
    }
    
    public class ProdDetailsVariant : IProdDetails
    {
        //...
    }
    
    public class ProdDetailsFancy : IProdDetails
    {
        //...
    }
    

    然后,在您的 GetProductDetails action,使用基础对象作为返回类型。

    [HttpGet("prodDetails")]
    public async Task<ActionResult<List<IProdDetails>>> GetProductDetails(string productID)
    {
        // get product type from SQL Server database 
        if (productType == 1)
        {
            List<ProdDetailsStandard> listStandard = new List<ProdDetailsStandard>();
            // add items to list
            return listStandard.Cast<IProdDetails>().ToList();
        }
    
        if (productType == 2)
        {
            List<ProdDetailsVariant> listVariant = new List<ProdDetailsVariant>();
            // add items to list
            return listVariant.Cast<IProdDetails>().ToList();
        }
    
        if (productType == 3)
        {
            List<ProdDetailsFancy> listFancy = new List<ProdDetailsFancy>();
            // add items to list
            return listFancy.Cast<IProdDetails>().ToList();
        }
    
        //.....
    }
    

    现在,只有具有扩展基础对象的对象才能作为返回类型。我希望这个答案能给你一些帮助。

    推荐文章