如何每 1 小时自动获取一个外部 api?

Posted

技术标签:

【中文标题】如何每 1 小时自动获取一个外部 api?【英文标题】:How to fetch an external api every 1 hour automatically? 【发布时间】:2021-11-21 17:09:47 【问题描述】:

我已经使用 .NET Core 创建了一个 web-api,并且我的 webapi 中有一个服务可以获取一个外部 api。我想知道是否有办法每 1 小时执行一次此服务。

 public string GetData()
        
            HttpClient http = new HttpClient();
            http.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("APIKEY", header);
            var data = http.GetAsync(url).Result.Content.ReadAsStringAsync().Result;
            return data;
        

更新

感谢您的帮助,在我进行了一些研究后,我发现我可以通过使用 Hangfire 来完成重复性工作。无需 Windows 服务或单独的进程,并且非常易于使用。 如果有人遇到同样的问题,请尝试使用它。

Hangfire 的文档:https://www.hangfire.io/

【问题讨论】:

看到这个问题:Write a recurring task scheduler 这个是windows应用的,我需要一个web app的解决方案。 您要一直打开一个浏览器窗口以便您的网络应用程序运行吗?听起来您需要以不同的方式进行此操作,但是如果您需要这样做,则需要将javascriptsetIntervalfetch一起使用-例如setInterval(() => fetch("..."), 3600000) @AliZedan 这个想法是您编写一个调用 Web 服务的 Windows 应用程序。您是否要求此调用必须来自特定的某个地方? 【参考方案1】:

您可以实现作为托管服务运行的后台任务,请参阅以下example at Microsoft

总结:

在配置服务的位置添加后台任务(依赖注入),例如services.AddHostedService<MyDataFetcher>(); 实现 MyDataFetcher 类,并使其继承 IHostedService 和 IDisposable,例如:public class MyDataFetcher : IHostedService, IDisposable 确保您的服务始终处于开启状态(并且在不使用时不会进入睡眠状态)

【讨论】:

以上是关于如何每 1 小时自动获取一个外部 api?的主要内容,如果未能解决你的问题,请参考以下文章

如何从 onchange 事件外部获取 jQuery UI 自动完成值?

Gmail /Google 应用程序每小时/每天自动使用脚本/api 永久删除垃圾邮件

java 调用天气接口 自动获取当天天气

SQLPLUS 输出:如何自动获取每列的最小列宽?

如何使用新的 iOS 7 API 获取自动换行信息?

每小时调用外部 API 并单独执行约 10000 行任务的作业