防止Simple.OData.Client获取整个结构

时间:2019-03-07 01:41:10

标签: c# .net-core simple.odata.client

我在我的应用程序中使用了simple.odata.client。问题是客户端在第一次调用时正在检索整个结构(太大(超过30MB)),因此我超时了吗?是否有任何参数/设置可以防止客户端检索整个结构。 有没有其他可以代替我的应用程序帮助我完成应用程序的软件包

2 个答案:

答案 0 :(得分:1)

我在客户请求呼叫中使用OData Top和Skip。例如;

    var accessToken = await _psUtils.GetUspsReferenceApiAccessToken(token);
    var client = new ODataClient(SetODataToken(_psUtils.GetBaseUspsReferenceApiUrl(), accessToken));
    var annotations = new ODataFeedAnnotations();

    addressComplianceCodes = await client.For<AddressComplianceCode>()
        .Filter(x => x.Description.Contains(searchValue) || x.Code.Contains(searchValue))
        .Top(pageSize).Skip(skip)
        .OrderByDescending(sortColumn)
        .FindEntriesAsync(annotations, token);

在我的客户代码中,我有一个寻呼机,它跟踪我传递到顶部并跳过的值,以便我可以逐步浏览页面。 Top是每页记录的总数。注释对象返回Count属性,可用于显示记录总数。即

annotations.Count

Here is a link to the OData.org tutorial讨论顶部和底部。

https://github.com/simple-odata-client/Simple.OData.Client/wiki/Results-projection,-paging-and-ordering谈论分页。

答案 1 :(得分:1)

Simple.OData客户端将在对象的生命周期中从服务中检索一次元数据。

您还可以使用元数据xml字符串初始化客户端,这将阻止客户端进行呼叫。

下面是我的代码的例外,其中MetaDataDocumentAsString是作为字符串的XML元数据。该代码还在用于创建客户端的httpclient实例中设置OAuth2承载令牌。

           HttpClient.BaseAddress = new Uri(AppSettings.Dynamics365.WebAPI_ServiceRootURL);

           //Use the httpClient we setup with the Bearer token header           
           ODataClientSettings odataSettings = new ODataClientSettings(HttpClient, new Uri(WebAPI_VersionRelativeURL, UriKind.Relative))
           {
               //Setting the MetadataDocument property prevent Simple.OData from making the expensive call to get the metadata
               MetadataDocument = MetaDataDocumentAsString
           };
           _ODataClient = new ODataClient(odataSettings);
           HttpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", GetToken().Access_token);}

有关更多详细信息,请参见github问题 https://github.com/simple-odata-client/Simple.OData.Client/issues/314