ASP.NET Core实现强类型Configuration读取配置数据
2017-07-25 14:15
781 查看
.NET Core读取JSON文件通过读取文件方式
当我将VS2015项目用VS2017打开后再添加控制器,此时会报错如下:此时我们应该在该项目中的.csproj中添加如下这一句才能解决此问题:
<ItemGroup> <DotNetCliToolReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Tools" Version="1.0.0" /> </ItemGroup>我们在读取存放JSON目录时利用 IHostingEnvironment 类来实现,通过该类中的如下两个属性来获取项目目录:
//获取当前项目所在目录 var contentPath = _hostingEnv.ContentRootPath; //获取wwwroot所在目录 var rootPath = _hostingEnv.WebRootPath;我们在当前项目下建立一个存放JSON的文件夹,如下:
在该json文件中,我们给出数据如下:
{ "name": "jeffcky", "age": 25}接下来则是读取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(); }
此时将完全读取数据:
到今天我才发现匿名类型是只读的,而不能赋值。【可笑的我】
上述是一种通过读取Json文件的方式来读取数据,当每来一个请求则读取一次文件,不太合适,所以老大说不可取,那就用第二种诺。
.NET Core内置读取JSON文件
当我们需要在其他控制器获取 appsettings.json 中的值时我们是怎样做的呢?比如我们要读取该json文件cnblogs节点下的name值{ "LogPath": "C:\\Jeffcky_StudyEFCore\\logs", "Logging": { "IncludeScopes": false, "LogLevel": { "Default": "Debug", "System": "Information", "Microsoft": "Information" } }, "cnblogs": { "name": "Jeffcky" } }
此时我们通过配置类Configuration来读取,同时我们需要将此类接口进行注入,下面两种方式皆可:
services.AddSingleton<IConfigurationRoot>(Configuration); services.AddSingleton<IConfiguration>(Configuration);接下来同样在控制器构造函数中进行获取。
然后就是获取该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(); }
由于在读取配置json需要一个根节点,所以我们将上述read.json文件进行如下修改:
{ "cnblogs": { "Name": "jeffcky", "Age": 25 } }
然后在 ConfigureServices 方法中获取该节点。
services.Configure<Person>(Configuration.GetSection("cnblogs"));此时在控制器构造函数就变成了如下这样:
private readonly Models.Person p; public ReadJsonController(IOptions<Models.Person> option) { p = option.Value; }最终将直接读取到json中配置的数据:
[HttpPost] public IActionResult Json() { var age = p.Age; var name = p.Name; return View(); }
一切都是那么简单和自然。
相关文章推荐
- 详解ASP.NET Core实现强类型Configuration读取配置数据
- ASP.NET Core实现强类型Configuration读取配置数据
- ASP.NET Core实现强类型Configuration读取配置数据
- 【原生态跨平台:ASP.NET Core 1.0(非Mono)在 Ubuntu 14.04 服务器上一对一的配置实现-篇幅2】
- 【原生态跨平台:ASP.NET Core 1.0(非Mono)在 Ubuntu 14.04 服务器上一对一的配置实现-篇幅1】
- [C#]使用 C# 代码实现拓扑排序 dotNet Core WEB程序使用 Nginx反向代理 C#里面获得应用程序的当前路径 关于Nginx设置端口号,在Asp.net 获取不到的,解决办法 .Net程序员 初学Ubuntu ,配置Nignix 夜深了,写了个JQuery的省市区三级级联效果
- Asp .net core api+Entity Framework core 实现数据CRUD数据库中(附Git地址)
- ASP.NET Core实现类库项目读取配置文件
- ASP.NET Core 实现用户登录验证的最低配置
- [亲测]七步学会ASP.NET Core 2.0怎么发布/部署到Ubuntu Linux服务器并配置Nginx反向代理实现域名访问
- ASP.NET Core实现类库项目读取配置文件
- Asp.Net WebAPI配置接口返回数据类型为Json格式
- ASP.NET Core中实现用户登录验证的最低配置示例代码
- C#实现多级子目录Zip压缩解压实例 NET4.6下的UTC时间转换 [译]ASP.NET Core Web API 中使用Oracle数据库和Dapper看这篇就够了 asp.Net Core免费开源分布式异常日志收集框架Exceptionless安装配置以及简单使用图文教程 asp.net core异步进行新增操作并且需要判断某些字段是否重复的三种解决方案 .NET Core开发日志
- ASP.NET Core实现类库项目读取配置文件
- EF Core使用SQL调用返回其他类型的查询 ASP.NET Core 2.0 使用NLog实现日志记录 CSS 3D transforms cSharp:use Activator.CreateInstance with an Interface? SqlHelper DBHelper C# Thread.Abort方法真的让线程停止了吗? 注意!你的Thread.Abort方法真
- 设计、实现一个 Asp.Net 应用的通用数据存取层(二)
- asp.net 2.0-实现数据访问(1)
- 设计并实现用于ASP.NET一个通用的数据存取层应用程序 原作者 Paul Abarham 翻译 cwxiao888@163.com
- 在ASP.NET页面中实现数据棒图