如何从webapi控制器构建和返回结果

时间:2016-01-14 02:47:41

标签: c# asp.net-web-api asp.net-web-api2

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

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

但是它需要一个包含2个列表和一个对象的类吗?然后将其作为列表返回?这就是我迷失的地方。

  [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();
    }

2 个答案:

答案 0 :(得分:3)

如果您希望它与完全匹配Javascript中的内容,请将返回类型更改为List<object>并返回:

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

恕我直言,在这种情况下,以下模型将更适合(如果你可以改变它,那就是):

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

在这种情况下,您可以将返回类型设置为object并返回:

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

一点点好,没有?

答案 1 :(得分:1)

你可以简单地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;

我不知道你的客户是否期望它们在相同的有效载荷中......