• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >ASP.NET > 详解ASP.NET Core实现强类型Configuration读取配置数据

详解ASP.NET Core实现强类型Configuration读取配置数据

作者:Jeffcky 字体:[增加 减小] 来源:互联网 时间:2017-05-11

Jeffcky通过本文主要向大家介绍了configuration,configuration error,system configuration,usb configuration,sata configuration等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

前言

实现读取JSON文件几种方式,在项目中采取老办法简单粗暴,结果老大过来一看,恩,这样不太可取,行吧那我就用.NET Core中最新的方式诺,切记,适合的才是最好的,切勿懒。

.NET Core读取JSON文件通过读取文件方式

 当我将VS2015项目用VS2017打开后再添加控制器,此时会报错如下:

此时我们应该在该项目中的.csproj中添加如下这一句才能解决此问题:

 <ItemGroup>
 <DotNetCliToolReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Tools" Version="1.0.0" />
 </ItemGroup>
</div>

我们在读取存放JSON目录时利用 IHostingEnvironment 类来实现,通过该类中的如下两个属性来获取项目目录:

   //获取当前项目所在目录
   var contentPath = _hostingEnv.ContentRootPath;

   //获取wwwroot所在目录
   var rootPath = _hostingEnv.WebRootPath;
</div>

我们在当前项目下建立一个存放JSON的文件夹,如下:

在该json文件中,我们给出数据如下:

{
 "name": "jeffcky",
 "age": 25
}
</div>

接下来则是读取JSON文件并获取数据了:

  [HttpPost]
  public async Task<IActionResult> Json()
  {
   var result = string.Empty;

   var filePath = _hostingEnv.ContentRootPath + Path.DirectorySeparatorChar + "Json"
    + Path.DirectorySeparatorChar + "Read.json";

   using (var streamReader = System.IO.File.OpenText(filePath))
   {
    result = await streamReader.ReadToEndAsync();
   }

   var json = new { name = string.Empty, age = 0 };

   var data = JsonConvert.DeserializeAnonymousType(result, json);

   return View();
  }
</div>

此时将完全读取数据:

到今天我才发现匿名类型是只读的,而不能赋值。【可笑的我】

上述是一种通过读取Json文件的方式来读取数据,当每来一个请求则读取一次文件,不太合适,所以老大说不可取,那就用第二种诺。

.NET Core内置读取JSON文件

当我们需要在其他控制器获取 appsettings.json 中的值时我们是怎样做的呢?比如我们要读取该json文件jb51节点下的name值

{
 "LogPath": "C:\\Jeffcky_StudyEFCore\\logs",
 "Logging": {
 "IncludeScopes": false,
 "LogLevel": {
  "Default": "Debug",
  "System": "Information",
  "Microsoft": "Information"
 }
 },
 "jb51": {
 "name": "Jeffcky"
 }
}
</div>

此时我们通过配置类Configuration来读取,同时我们需要将此类接口进行注入,下面两种方式皆可:

   services.AddSingleton<IConfigurationRoot>(Configuration);
   services.AddSingleton<IConfiguration>(Configuration);
</div>

接下来同样在控制器构造函数中进行获取。

然后就是获取该json中cnblogs节点下的数据了。

这种方式挺好,但是对于我们习惯了智能提示来说要是写错了单词,还得检查岂不麻烦,所以我们最终读取json通过强类型来实现。在程序启动时就加载我们自定义的json文件。

  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)
    .AddJsonFile("read.json")
    .AddEnvironmentVariables();
   Configuration = builder.Build();
  }
</div>

由于在读取配置json需要一个根节点,所以我们将上述read.json文件进行如下修改:

{
 "jb51": {
 "Name": "jeffcky",
 "Age": 25
 }
}
</div>

然后在 ConfigureServices 方法中获取该节点。

 services.Configure<Person>(Configuration.GetSection("jb51"));
</div>

此时在控制器构造函数就变成了如下这样:

  private readonly Models.Person p;
  public ReadJsonController(IOptions<Models.Person> option)
  {
   p = option.Value;
  }
</div>

最终将直接读取到json中配置的数据:

  [HttpPost]
  public IActionResult Json()
  {
   var age = p.Age;
   var name = p.Name;

   return View();
  }
</div>

一切都是那么简单和自然。

总结

本节稍稍讲解了下在.NET Core中如何实现强类型Configuration从而使得当程序启动时直接将json文件进行加载到内存当中而非每次都去读取文件来加载,希望对阅读本文的你有稍稍帮助。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

</div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 详解ASP.NET Core实现强类型Configuration读取配置数据
  • Net Core全局配置读取管理方法ConfigurationManager
  • SQL Server 2005 RTM 安装错误 :The SQL Server System Configuration Checker cannot be executed due to

相关文章

  • 2018-08-20.NET实用扩展方法详解
  • 2017-05-11Asp.net中的页面乱码的问题
  • 2017-05-11Asp.net中的GridView导出遇到的两个问题和解决方法
  • 2018-08-20NetCore WebSocket即时通讯示例
  • 2017-05-11ASP.NET MVC 4 中的JSON数据交互的方法
  • 2017-05-11Opencv2.4.13与Visual Studio2013环境搭建配置教程
  • 2017-05-11Winform OpenFileDialog打开文件对话框
  • 2017-05-11解析ABP框架领域层中的实体类与仓储类
  • 2017-05-11vs2010根据字符串内容添加断点的方法介绍
  • 2017-05-11asp.net HttpWebRequest自动识别网页编码

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • ASP.NET中使用GridView实现分级显示的代码
    • Javascript 直接调用服务器C#代码 ASP.NET Ajax实例
    • asp.net 下载文件时根据MIME类型自动判断保存文件的扩展名
    • .NET实现热插拔功能(动态替换功用)方案实例
    • aspx如果引用cs中的变量的方法
    • 在ASP.NET 2.0中操作数据之五十七:在分层架构中缓存数据
    • Asp.net SignalR支持的平台有哪些
    • aspx不显示ViewState的实例
    • 使用ASP.NET.4.5.1+MVC5.0 搭建一个包含 Ninject框架 项目
    • 浅谈对Lambda表达式的理解

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有