【问题标题】:c# how to only get updated objects from web apic#如何只从web api获取更新的对象
【发布时间】:2019-04-07 21:36:01
【问题描述】:

我正在从 c# web api 向我的 angular 应用程序轮询数据。每次轮询所有数据时,即使大部分数据没有更改。我只想轮询实际上以任何方式更新的对象。

这是我在 Controller.cs 中的代码

 //Get all details of the available vehicles
        [HttpGet]
        [Route("api/details")]
        public object GetFleetStatusDetails()
        {

            var fmsData = this.fmsdb.Value.GetFleetStatusDetails();
            var data = fmsData.Entries;
            List<VehicleDetails> result = new List<VehicleDetails>();
            foreach (var item in data)
            { 
                if (item != null)
                {

                    var details = ConvertVehicleDetail(item);
                    result.Add(details);

                }

            }
            return result;
        }

如您所见,我将数据转换为 VehicleDetails,稍后将其添加到 VehicleDetails 列表中。我得到的数据是 JSON 格式的。有没有办法在不深入数据库的情况下将我的上次民意调查与当前民意调查进行比较?如果是这样,我该怎么做?

【问题讨论】:

  • 除非您的数据库可以通知您数据已更新,否则您必须查询数据以将其与上一个结果进行比较,所以我现在很想拒绝。
  • @PeterBons 感谢您的回复!而且我正要往下走一点,比如我的ApiService,那里可以做点什么吗?

标签: c# json angular asp.net-web-api


【解决方案1】:

我建议通过浏览器的本地存储或使用 ngrx 保存最后一个状态。

【讨论】:

  • 你好仁!感谢您的回复。如果我使用的是ngrx,我基本上必须将所有数据发送到前端,这就是我首先要做的,对吧?或者你认为我可以通过什么方式进行ngrx?
【解决方案2】:

在不知道 this.fmsdb.Value.GetFleetStatusDetails(); 做什么或您调用的数据库架构的情况下,最好的猜测答案是在 API 中创建两个端点。

第一个将使用this.fmsdb.Value.GetFleetStatusDetails(); 来获得完整的结果集。从端点下载数据后,将当前日期/时间存储在角度视图中并将其传递给第二个端点...

第二个端点将获取自您获得第一组数据的日期/时间以来已更改的记录。这假设您正在存储更新的日期时间。

[HttpGet]
[Route("api/updateddetails")]
public object GetUpdatedFleetStatusDetails([FromUrl]DateTime date)
{
    var fmsData = this.fmsdb.Value.GetUpdatedFleetStatusDetails(date);
    return fmsData.Entries
        .Where(x => x != null)
        .Select(ConvertVehicleDetail);
}

如果知道 this.fmsdb.Value.GetFleetStatusDetails() 中的内容,可以提供更多详细信息

PS 没有测试过这段代码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-05
    • 1970-01-01
    • 2019-06-14
    • 2016-04-11
    • 1970-01-01
    • 2015-07-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多