访问控制器类中的 appsettings.json 值

Posted

技术标签:

【中文标题】访问控制器类中的 appsettings.json 值【英文标题】:Access appsettings.json values in controller classes 【发布时间】:2016-11-16 11:40:25 【问题描述】:

无法弄清楚如何在 startup.cs 之外读取 appsettings.json 值。例如,我想做的是在 _Layout.cshtml 中,从配置中添加站点名称:

例如:

ViewData["SiteName"] = Configuration.GetValue<string>("SiteSettings:SiteName");

甚至更好:

public class GlobalVars 
    public static string SiteName => Configuration.GetValue<string>("SiteSettings:SiteName");

到目前为止,这是我的代码:

[appsettings.json]

"SiteSettings": 
    "SiteName": "MySiteName"

[startup.cs]

public Startup(IHostingEnvironment env)

    var builder = new ConfigurationBuilder()
        .SetBasePath(env.ContentRootPath)
        .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
        .AddJsonFile($"appsettings.env.EnvironmentName.json", optional: true)
        .AddEnvironmentVariables();
    Configuration = builder.Build();

    var siteName = Configuration.GetValue<string>("SiteSettings:SiteName");


public IConfigurationRoot Configuration  get; 

也许我读错了文档,但我似乎无法在 Startup 类之外公开 Configuration 对象。

【问题讨论】:

你看到了吗:***.com/questions/31453495/… 【参考方案1】:

在您的 Startup.cs 中

    public void ConfigureServices(IServiceCollection services)
    
        services.AddSingleton<IConfiguration>(Configuration);
    

然后在你的控制器中:

public class ValuesController : Controller

    IConfiguration configuration;

    public ValuesController(IConfiguration configuration)
    
        this.configuration = configuration;
    

【讨论】:

效果很好。您是否知道在 GlobalVars.cs 之类的东西中静态引用它的方法,所以我不必在每个控制器的顶部声明它? 您可以创建一个单例并从中公开配置属性。确保它始终是同一个实例。然后你可以在 Startup 中使用它,而不是在那里创建一个新的 Configuration 实例。这将使该属性可供其他图层使用。 这实际上是对 IConfiguration 的滥用。控制器不应该关心配置中间件。它不应该仅仅为了传递一个设置而要求它启动并运行。 DI 应该注册并将设置注入控制器,可能以 IOption 对象的形式

以上是关于访问控制器类中的 appsettings.json 值的主要内容,如果未能解决你的问题,请参考以下文章

Appsetting.json 读取控制器类中键的值,空白?

如何在使用 .NET Core 的控制台应用程序中从 appsettings.json 获取值?

无法从类库访问 appsettings.json

需要在上下文类中进行哪些更改才能将连接字符串移动到 appsettings.json 文件中

将 appsettings.json 文件中的机密存储在 Azure Key Vault 上的 .Net 控制台应用程序中

嵌套类中的依赖注入