如何构建webapi控件并从中返回结果

本文关键字:返回 结果 控件 webapi 何构建 构建 | 更新日期: 2023-09-27 18:30:10

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

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

但是它c需要一个包含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();
    }

如何构建webapi控件并从中返回结果

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

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

IMHO在这种情况下,以下模型将更适合(如果你可以更改它的话):

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

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

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;

我不知道你的客户是否期望它们在相同的负载中。。。