访问控制器类中的 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 文件中的机密存储在 Azure Key Vault 上的 .Net 控制台应用程序中