如何在RESTful Web API中加入相关数据?

时间:2016-05-23 15:17:52

标签: angularjs rest asp.net-web-api

这似乎是一种常见的情况所以我一直在寻找这样的问题,但我找不到它。我在ASP.NET中构建了一个RESTful Web API。我有两个相关的表:照片和PhotoGroups。 Photos表具有PhotoGroupID列,该列与PhotoGroups中的同一列相关。在我的AngularJS单页面应用程序中,我使用标准RESTful查询从两个表中检索数据。我正在显示一个页面,其中列出了网格布局中的照片,其中一列是PhotoGroupID,数字分别为1,2,3和4.那么如何通过加入这些数字来显示这些组的名称而不是这些数字RESTful方式的两个查询?我知道如何在Web API中添加一个新方法,它为我提供了连接数据,但这在RESTful意义上看起来并不自然。在AngularJS中,在客户端执行此操作的常用方法是什么?是否有某种类型的过滤器连接两个表,或者某些特殊语法将列绑定到PhotoGroup名称列?在将来显示来自相关表格的信息时,我会遇到很多这样的情况,我想以正确的方式做到这一点。

1 个答案:

答案 0 :(得分:0)

我开始通过向加入了Photos和PhotoGroups表的Web API添加一个新方法来解决这个问题,但我很快意识到我将返回一组匿名对象。要解决这个问题,需要声明一个包含我想要返回的列的新类。这似乎比REST的美观和简洁要复杂得多。

所以我考虑了AngularJS中的替代方案,并决定我可以编写一个自定义过滤器,使用我在控制器范围内已经拥有的PhotoGroups JSON数组将PhotoGroupID转换为GroupName。实现该解决方案的代码如下所示。它有点乱,但不是很好,它使Web API保持简洁。

in Filter.js:

angular.module('PhotoFilters', []).filter('groupName', function ()
{
    return function (input, scope)
    {
        var groupName = "Not Found";
        angular.forEach(scope.PhotoGroups, function (group)
        {
            if (group.PhotoGroupID == input)
            {
                groupName = group.GroupName;
            }
        });
        return groupName;
    };
});

in my HTML table:

<td>{{ x.PhotoGroupID | groupName:this }}</td>