在ASP .Net Core Web应用程序中读取和存储静态查找数据

Fab*_*uez 1 c# web-applications asp.net-core-mvc

我有一个Web应用程序(ASP .Net Core 1.1 MVC),它具有一些基本的CRUD操作。该Web应用程序使用Web API进行所有操作。

该Web应用程序具有一些页面供编辑,其中包含基本文本框和下拉列表。一些下拉列表包含静态信息-例如,可能存在具有以下值的查找表:

  1. 日常
  2. 每周
  3. 每月一次
  4. 每年

Web API公开了一个端点来检索这些值。但是,我显然不想每次用户导航到“编辑”页面时都调用此函数。由于这是永远不变的静态数据,因此我想在Web应用程序启动时从API读取一次此查询数据。问题是我不确定执行此操作的最佳位置。我应该将Main()放在Program.cs中,还是放在Startup.cs中的Startup()中?还是应该使用DI来完成(以某种方式...不确定如何发生)。这种情况下有一些最佳做法吗?

然后下一个问题是我应该在哪里存储这些数据?我可以只创建一个包含所有查找表的静态全局变量吗?这是适用于所有用户/会话的数据,所以我认为基本的全局键/值对列表会很好吗?我可以从各种控制器中读取此信息,以在视图中填充下拉列表?

谢谢...只是想以正确的方式做。任何提示将非常感谢。

Rre*_*Cat 5

您可以将数据保存为单例(应用程序状态数据)。您必须使用依赖注入使数据可用于所有用户:

  1. 定义包含数据的服务(例如,名为MyAppData的类)。

    public class MyAppData
    {
    // Declare properties/methods/etc.
    } 
    
    Run Code Online (Sandbox Code Playgroud)
  2. 将服务类添加到ConfigureServices(例如services.AddSingleton<MyAppData>();)。

  3. 在每个控制器中使用数据服务类:

    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.)
       }
    } 
    
    Run Code Online (Sandbox Code Playgroud)

您可以在文章-ASP.NET Core中的会话和应用程序状态简介(在“ 应用程序状态数据”部分中)中找到更多信息。

另外,我建议您缓存数据-Caching

最后,您可以在前端使用localStorage来存储更新的信息。

PS: -你可以在非核心的网站上使用的应用程序状态/sf/answers/261348461/