【问题标题】:How to get Odata Next Link from the returned JSON object using angular $http service如何使用角度 $http 服务从返回的 JSON 对象中获取 Odata Next Link
【发布时间】:2015-07-14 04:37:20
【问题描述】:

我已经为我的 web api 实现了 Odata 查询语法。我成功地只能返回前 10 个结果和更多结果的链接。但是,我无法使用我的 angularjs 前端从服务器返回的 JSON 对象中提取此链接。

假设服务器响应如下:

{
  "odata.metadata":"http://localhost:60497/odata/$metadata#tables","value":[
    {
      "id":001,"name":"abc"
    },{
      "id":002,"name":"pqr"
    },{
      "id":003,"name":"xyz"
    },{
      .
      .
      .
  ],"odata.nextLink":"http://localhost:60497/odata/tables?$skip=10"
}

现在我通过使用 $http 的成功方法将返回的数据分配给变量并使用 ng-repeat 来显示数据。我将其分配如下:

.success(function(data)){
  $scope.foo = data.value;
}

但是,当我尝试使用以下方式访问下一个链接时:

$scope.link = data.odata.nextLink;

在成功方法中它给了我一个错误。我在这里错过了什么?我还能如何访问返回的链接?有没有其他方法可以实现服务器端分页?

【问题讨论】:

    标签: .net json angularjs asp.net-web-api odata


    【解决方案1】:

    我为 Microsoft Graph API 设计的 C# 方法如下。

    private static string GetNextLink ( JObject pjobjResult )
    {
        JProperty jtLastToken = ( JProperty ) pjobjResult.Last;
    
        if ( jtLastToken.Name.Equals ( @"@odata.nextLink" ) )
        {
            return jtLastToken.Value.ToString ( );
        }   // TRUE (There is at least one more page.) block, if ( jtLastToken.Name.Equals ( @"@odata.nextLink" ) )
        else
        {
            return SpecialStrings.EMPTY_STRING;
        }   // FALSE (The current page is the last one.) block, if ( jtLastToken.Name.Equals ( @"@odata.nextLink" ) )
    }   // private static string GetNextLink
    

    在上述方法中,SpecialStrings.EMPTY_STRING 是我用来代替 string.Empty 的真正常量的名称。

    类似的方法也应该适用于 PowerShell

    【讨论】:

      【解决方案2】:

      我让它工作了

      theReturnedObject['@odata.nextLink']
      

      【讨论】:

        【解决方案3】:
            using Newtonsoft.Json;     
            [JsonProperty("@odata.nextLink")]
            public string nextPage { get; set; }
        

        【讨论】:

          【解决方案4】:

          不要忘记 odata 值前面应该有一个 @。我不确定您的实现如何处理该字符,但它应该是一个有效的前缀。

          我遇到的问题是一些提供者使用完整路径,而一些只使用来自服务端点的相对路径。

          【讨论】:

            【解决方案5】:

            我或多或少有同样的问题。我想这与 JavaScript 对象及其属性的引用方式有关。参考文献

            data.odata.nextLink
            

            意味着有一个属性“odata”带有一个子属性/字段“nextLink”。情况并非如此,“odata.nextLink”是属性的名称。不知道OData为什么会这样。

            我通过使用字符串引用得到了这个属性的内容,即

            data['odata.nextLink']
            

            不知道有没有什么缺点,不过好像还可以……

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2019-08-31
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多