咨询区

  • Oluwafemi

在 appsettings.json 中我有如下的 AppSettings 实体数据,如下代码所示:


{"AppSettings": {"token": "1234"}
}

我在网上搜了很久,寻找如何从 .json 文件中获取 AppSettings 实体,貌似都不对,比如下面这样的获取方式。


var configuration = new Configuration();
var appSettings = configuration.Get("AppSettings"); // null
var token = configuration.Get("token"); // null

我知道在 ASP.NET 4.0 中可以像下面这样获取。


System.Configuration.ConfigurationManager.AppSettings["token"];

请问我如何在 ASP.NET Core 中做等价处理 ?

回答区

  • Yuval Itzchakov

要想在 ASP.NET Core 中使用 settings 的话?推荐的做法是:在 Startup 类中初始化 Configuration,然后再使用 Options 模式访问 Configuration 中的具体某个配置节,为了方便讲解,参考下面的例子。


{"MyConfig": {"ApplicationName": "MyApp","Version": "1.0.0"}
}

然后再配套一个 POCO 类,类定义如下:


public class MyConfig
{public string ApplicationName { get; set; }public int Version { get; set; }
}

现在就可以在 Startup.cs 中构建 Configuration 了。


public class Startup
{public IConfigurationRoot Configuration { get; set; }public Startup(IHostingEnvironment env){var builder = new ConfigurationBuilder().SetBasePath(env.ContentRootPath).AddJsonFile("appsettings.json", optional: true, reloadOnChange: true);Configuration = builder.Build();}
}

值得注意的是在 .NET Core 2.0appsettings.json 已经是默认注册好的,现在你可以根据你的具体环境修改 appsettings.{Environment}.json 配置文件名即可。

如果你想将 configuration 注入到 Controller 中,需要在 Startup.ConfigureServices 方法内做一下配置,参考如下代码。


public void ConfigureServices(IServiceCollection services)
{services.AddMvc();// Add functionality to inject IOptions<T>services.AddOptions();// Add our Config object so it can be injectedservices.Configure<MyConfig>(Configuration.GetSection("MyConfig"));
}

然后就可以注入到 Controller 中了。


public class HomeController : Controller
{private readonly IOptions<MyConfig> config;public HomeController(IOptions<MyConfig> config){this.config = config;}// GET: /<controller>/public IActionResult Index() => View(config.Value);
}

完整的 Startup 如下。


public class Startup
{public IConfigurationRoot Configuration { get; set; }public Startup(IHostingEnvironment env){var builder = new ConfigurationBuilder().SetBasePath(env.ContentRootPath).AddJsonFile("appsettings.json", optional: true, reloadOnChange: true);Configuration = builder.Build();}public void ConfigureServices(IServiceCollection services){services.AddMvc();// Add functionality to inject IOptions<T>services.AddOptions();// Add our Config object so it can be injectedservices.Configure<MyConfig>(Configuration.GetSection("MyConfig"));}
}

点评区

想在 Appsettings.json 中获取具体配置信息,我还特意看了下项目中是如何实现的????,大体上分两种。

  • 层级读取


services.AddTransient<IDbConnection>(db => new MySqlConnection(Configuration.GetSection("Config")["ConnectionString"]));
  • Options 方式读取

services.Configure<AppSettingConfig>(Configuration.GetSection("Config"));services.Configure<ExternalApiConfig>(Configuration.GetSection("ExternalAPI"));

如果不想定义适配类,那就直接用第一种即可,简单粗暴,如果想使用便捷,体现面向对象思想的话,那就用第二种啦 !!!

NET问答: 如何在 ASP.NET Core 的 .json 文件中读取 AppSettings ?相关推荐

  1. [第二篇]如何在ASP.Net Core的生产环境中使用OAuth保护swagger ui

    在我上篇文章如何在ASP.Net Core的生产环境中保护swagger ui中,我们讨论了如何使用基本身份验证来保护 swagger ui. 使用 OAuth 2.0 和 OpenIdConnect ...

  2. ASP.NET Core launchsettings.json文件(8)《从零开始学ASP.NET CORE MVC》:

    本文出自<从零开始学ASP.NET CORE MVC> 推荐文章:ASP.NET Core 进程外(out-of-process)托管 ASP.NET Core launchsetting ...

  3. NET问答: 如何在 ASP.NET Core Web API 的 Response 中添加自定义的 Header ?

    咨询区 JDawg: 我正在将 Web API 2 移植到 ASP.NET Core Web API 上,以前我都直接在 Response 属性上添加自定义的 Header,如下代码所示: HttpR ...

  4. 如何在 ASP.Net Core 中使用 Configuration Provider

    ASP.NET Core 是一个开源的,跨平台的,精简的模块化框架,可用于构建高性能,可扩展的web应用程序, ASP.NET Core 中的数据配置常用 k-v 的形式存储,值得注意的是,新的数据配 ...

  5. 如何在 ASP.NET Core 中使用 HttpClientFactory ?

    ASP.Net Core 是一个开源的,跨平台的,轻量级模块化框架,可用它来构建高性能的Web程序,这篇文章我们将会讨论如何在 ASP.Net Core 中使用 HttpClientFactory. ...

  6. 如何在 ASP.Net Core 中使用 Autofac

    依赖注入可以有效的实现对象之间的 松耦合 并能够实现代码的可测试和可维护性,ASP.Net Core 提供了一个极简版的容器实现对 依赖注入 的原生支持,然而内置的依赖注入容器相比成熟的 依赖注入容器 ...

  7. 如何在 ASP.NET Core 中使用 LazyCache

    微软的 ASP.NET Core 已经是一个非常流行的用于构建 高性能, 模块化 并能运行在 Windows, Linux, MacOS 上的 WEB 框架,通常能够让程序保持高性能的一个有效途径就是 ...

  8. 如何在 ASP.Net Core 中使用 Lamar

    ASP.Net Core 自带了一个极简的 开箱即用 的依赖注入容器,实际上,你还可以使用第三方的 依赖注入容器 来替代它,依赖注入是一种设计模式,它能够有效的实现对象之间的解耦并有利于提高单元测试和 ...

  9. 如何在 ASP.Net Core 中使用 MediatR

    MediatR 是一个 中介者模式 的.NET开源实现, 中介者模式 管控了一组对象之间的相互通讯并有效的减少了对象之间错综复杂的相互依赖,在 中介者模式 中,一个对象不需要直接和另一个对象进行通讯, ...

最新文章

  1. c语言程序设计运算符及表达式,c语言程序设计3第3章运算符和表达式
  2. DA14580做主机
  3. AIX主机信任关系配置
  4. P5887-Ringed Genesis【GCD】
  5. Vigenère密码(信息学奥赛一本通-T1402)
  6. registry:NoSuchMethodError zookeeper.server.quorum.flexible.QuorumMaj
  7. Git删除本地/本地远程/远程服务器分支
  8. bootstrap table 合并行_ElementUI Table组件如何使用合并行或列功能深入解析
  9. 怎么锁定计算机密码忘了怎么办,电脑在控制面板被锁密码忘记怎么开呢?
  10. Visual Studio 2017各版本安装包离线下载、安装全解析
  11. 什么是芯片加速器 Accelerator
  12. PSP金手指大全1215个CMF金手指合集
  13. 【微信小程序】发布流程及发布审核时如何提供测试账号?
  14. 标准柯西分布_柯西分布设独立随机变量X和Y都服从标准正态 – 手机爱问
  15. 绕过安卓SSL验证证书的常见四种方式
  16. 你是如何转行的?转行容易吗? 1
  17. 软件开发,如何快速有效缩短项目周期
  18. Ubuntu-的前世今生
  19. 批量更改Excel数据透视表字段汇总方式
  20. GroupingComparator 自定义分组

热门文章

  1. 伍迷随想冷饭集 之 瞻前顾后之随想
  2. IOS - UTF-8转码问题
  3. ----斐波那契数列---eval函数----类递归思想 栈 进出 思想
  4. Vue学习笔记入门篇——数据及DOM
  5. linq中的castT()及OfTypeT()
  6. 初识Ildasm.exe——IL反编译的实用工具(转自Youngman)
  7. Execute .NET Code under SQL Server 2005
  8. 初学ASP.NET 必看
  9. 爱普生第三方相机_值得购买第三方相机镜头吗?
  10. 中兴面试一个星期没有回音_如何在没有回声的情况下从亚马逊获取即时时尚建议...