【问题标题】:asp.net Web application Handle global variablesasp.net Web 应用程序处理全局变量
【发布时间】:2021-07-14 13:30:13
【问题描述】:

如何在 IIS 中部署的 asp.net Web API 项目中定义和初始化全局变量 这是我的两个案例

我需要一个看起来像这样的全局变量,它可以在所有代码中访问,从 Web API 到我在 Web API 中创建的实例

我的全局变量将如下所示

DataTable property = GetPropertyValuesFromDb()

在我重新启动 IIS 或重新发布项目之前,此属性不会改变

我不想每次都从数据库中加载值 需要一次性设置,所有子项目都可以访问

【问题讨论】:

    标签: c# asp.net asp.net-web-api global-variables static-variables


    【解决方案1】:

    为此,有一个名为 appsettings.json 的文件。你可以定义你的变量 然后通过 Configuration 变量访问它们。

    Configuration.getSection('SectionName')

    Configuration.getSection('SectionName:SubSectionName')

    配置可以在 Startup 类中访问,也可以注入到您在 DI 容器中使用的控制器或服务中。只需将 IConfiguration 类型的参数添加到 DI 容器中的控制器或服务的构造函数即可。

    但不建议使用 appsettings.json 来存储秘密变量,例如生产环境中的连接字符串。这些变量应该存储在生产环境中,也可以像上面提到的那样访问它们。

    【讨论】:

    • 静态构造函数是我一直在寻找的答案,但这个答案帮助我解决了另一个问题,谢谢
    【解决方案2】:

    您可以让您的 API 继承自存储此变量的基本 API。

    示例代码

    基础 API

    [Route("api/[controller]")]
    [ApiController]    
    public class BaseController : ControllerBase
    {
    
       public static DataTable _property;         
    
              public BaseController()
              {
                _property = GetPropertyValuesFromDb()
              }
    }
    

    从基本 API 继承的主 API

    [Route("api/[controller]")]
    [ApiController]    
    public class SomeController : BaseController 
    {
     
       public SomeController():base()
       {
    
       }
        
        [HttpPost]
        [Route("SomePath")]
        public string SomeMethod()
       {
           /*Access datatable here*/
           _property
       }
    }
    

    【讨论】:

    • 我不明白这对第一次从数据库加载数据有什么帮助
    【解决方案3】:

    您可以在包含静态类的解决方案中创建一个新项目。它作为一个常数存在。最后添加对主项目的引用

    【讨论】:

    • 带有静态构造函数的静态类可以解决这个问题,只是一个静态类并不能帮助我从数据库中加载数据,如果我这样做会被多次调用,
    猜你喜欢
    • 1970-01-01
    • 2011-05-31
    • 1970-01-01
    • 1970-01-01
    • 2013-12-19
    • 1970-01-01
    • 2022-12-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多