C#如何仅从Web API获取更新的对象

时间:2018-11-04 08:15:37

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

我正在从C#Web API轮询数据到我的角度应用程序。每次对所有数据进行轮询时,即使许多数据都没有更改。我只想轮询实际上已经以任何方式更新的对象。

这是我在Controller.cs中的代码

options(stringsAsFactors = FALSE)
games <- data.frame(index = c(1,2,3), player = c('John', 'Sam', 'Mary'))
weather <- data.frame(index = c(1,2,3), temperature = c('hot', 'cold', 'rainy'))
list1 <- list(games = games, weather = weather)

games <- data.frame(index = c(1,2,3), player = c('AA', 'BB', 'CC'))
weather <- data.frame(index = c(1,2,3), temperature = c('cold', 'rainy', 'hot'))
cars <- data.frame(index = c(1,2,3), car = c('honda', 'toyota','bmw'))
list2 <- list(games = games, weather = weather, cars = cars)

library(purrr)
all_list <- list(list1, list2)
all_names <- all_list %>% map(names) %>% reduce(union)
list(list1, list2) %>%
  # regroup named element together
  transpose(.names = all_names) %>%
  # bind the df together
  map(dplyr::bind_rows)
#> $games
#>   index player
#> 1     1   John
#> 2     2    Sam
#> 3     3   Mary
#> 4     1     AA
#> 5     2     BB
#> 6     3     CC
#> 
#> $weather
#>   index temperature
#> 1     1         hot
#> 2     2        cold
#> 3     3       rainy
#> 4     1        cold
#> 5     2       rainy
#> 6     3         hot
#> 
#> $cars
#>   index    car
#> 1     1  honda
#> 2     2 toyota
#> 3     3    bmw

如您所见,我将数据转换为VehicleDetails,随后将其添加到我的VehicleDetails列表中。即时输入的数据为JSON格式。有没有一种方法可以将我的上次轮询与当前轮询进行比较,而无需深入数据库?如果可以,我该怎么办?

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

在不知道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尚未测试此代码。