如何构建和 return 来自 Web API 控制器的结果

how to build and return a result from a webapi controler

所以我在我的网络 api 控制器中组合了一组存储过程调用。现在我需要 return 合并结果。 Javascript 就像这样简单:

var result = [{
     objectResult: value
   },{
      arryResult1:[value]
   },{
      arryResult2:[value]
   }]

但是它 c# 需要一个包含 2 个列表和一个对象的 class?然后 return 那作为一个列表?这是我有点迷路的地方。

  [HttpPost]
    [Route("builderContact")]
    public List<usp_get_builder_contact_data_Result> GetBuilderContact(parameter parameter)
    {
        object[] parameters = { parameter.company_id, parameter.subdivision_id };

        var builderContact =  db.Database.SqlQuery<usp_get_builder_contact_data_Result>("sandbox.usp_get_builder_contact_data {0},{1}",
        parameters).First();

        var floorplanDataResult = db.Database.SqlQuery<usp_get_floorplan_data_Result>("sandbox.usp_get_floorplan_data {0},{1}",
        parameters).ToList();

        var floorplanRelatedResult = db.Database.SqlQuery<usp_get_floorplan_related_sections_Result>("sandbox.usp_get_floorplan_related_sections {0},{1}",
        parameters).ToList();

        return ?;
    }

答案更新

  [HttpPost]
    [Route("bigEnchilada")]
    public List<object> GetBuilderContact(parameter parameter)
    {
        object[] parameters = { parameter.company_id, parameter.subdivision_id };

        var builderContact = db.Database.SqlQuery<usp_get_builder_contact_data_Result>("sandbox.usp_get_builder_contact_data {0},{1}",
        parameters).First();

        var floorplanDataResult = db.Database.SqlQuery<usp_get_floorplan_data_Result>("sandbox.usp_get_floorplan_data {0},{1}",
        parameters).ToList();

        var floorplanRelatedResult = db.Database.SqlQuery<usp_get_floorplan_related_sections_Result>("sandbox.usp_get_floorplan_related_sections {0},{1}",
        parameters).ToList();

        return (new object[] {
                new object { builderContact = builderContact },
                new object { floorplanDataResult = floorplanDataResult },
                new object { floorplanRelatedResult = floorplanRelatedResult }
            }).ToList();
    }

如果您希望它完全匹配Javascript中的内容,则将return类型更改为List<object>和return:

return new List<object> {
    new { objectResult = builderContact },
    new { arryResult1 = floorplanDataResult },
    new { arryResult2 = floorplanRelatedResult }
};

恕我直言,在这种情况下,以下模型更适合(如果您可以更改它,即):

var result = {
    objectResult: value,
    arryResult1: [value],
    arryResult2: [value]
}

在这种情况下,您可以将 return 类型设置为 object 和 return:

return new {
    objectResult = builderContact,
    arryResult1 = floorplanDataResult,
    arryResult2 = floorplanRelatedResult
};

稍微好一点,不是吗?

你可以简单地 concat 全部吗?

List<object> allItems = (
                            from x in floorplanDataResult.ToList() select new object()
                        ).ToList().Concat(
                            from y in floorplanRelatedResult.ToList() select new object()
                        ).ToList();
return allItems;

不过我不知道您的客户是否希望它们使用相同的有效载荷...