我有一个网络应用程序 (ASP .Net Core 1.1 MVC),它有一些基本的 CRUD 操作。网络应用使用网络 API 来执行所有操作。
网络应用程序有一些页面可供编辑,其中包含基本的文本框和下拉列表。一些下拉列表包含静态信息 - 例如,可能有一个包含这些值的查找表:
- 每日
- 每周
- 每月
- 每年
Web API 公开了一个端点来检索这些值。但是,我显然不想在用户每次导航到“编辑”页面时调用它。因为这是永远不会改变的静态数据,所以我想在网络应用程序启动时从 API 读取一次这个查找数据。问题是我不太确定最好的地方在哪里。我应该将 Main() 放在 Program.cs 中,还是放在 Startup.cs 中的 Startup() 中?还是应该使用 DI 来完成(不知何故……不确定会怎样)。这种情况是否有一些最佳实践?
然后下一个问题是我应该在哪里存储这些数据?我可以只创建一个静态的全局变量来保存所有查找表吗?这是适用于所有用户/ session 的数据,所以我认为基本的全局键/值对列表会很好吗?我可以从我的各种 Controller 中读取它来填充 View 中的下拉列表吗?
谢谢...只是想以正确的方式做到这一点。任何提示将不胜感激。
请您参考如下方法:
您可以将数据保存在单例中(应用程序状态数据)。你必须使用 Dependency Injection使数据对所有用户可用:
定义包含数据的服务(例如,名为 MyAppData 的类)。
public class MyAppData { // Declare properties/methods/etc. }将服务类添加到 ConfigureServices(例如
services.AddSingleton<MyAppData>();)。在每个 Controller 中消费数据服务类:
public class MyController : Controller { public MyController(MyAppData myService) { // Do something with the service (read some data from it, // store it in a private field/property, etc.) } }
您可以在文章中找到更多信息 - Introduction to session and application state in ASP.NET Core (在应用程序状态数据部分)
此外,我建议您缓存数据 - Caching .
最后,您可以使用 localStorage在前端持久化更新变化的信息。
PS:您可以在非核心网站中使用应用程序状态 - https://stackoverflow.com/a/3733549/182344 .
