如何每 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的解决方案。 您要一直打开一个浏览器窗口以便您的网络应用程序运行吗?听起来您需要以不同的方式进行此操作,但是如果您需要这样做,则需要将javascript的setInterval
与fetch
一起使用-例如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 自动完成值?