ASP.NET CORE读取json格式配置文件

目录
  • 一、在Startup类中读取json配置文件
    • 1、使用Configuration直接读取
    • 2、使用IOptions接口
      • 1、定义实体类
      • 2、修改json文件
      • 3、在StartUp类里面配置
    • 3、读取自定义json文件
      • 实例化类
      • 添加方式1
      • 添加方式2
  • 二、在类库中读取json文件

在.Net Framework中,配置文件一般采用的是XML格式的,.NET Framework提供了专门的ConfigurationManager来读取配置文件的内容,.net core中推荐使用json格式的配置文件,那么在.net core中该如何读取json文件呢?

一、在Startup类中读取json配置文件

1、使用Configuration直接读取

看下面的代码:

public IConfiguration Configuration { get; }

Configuration属性就是.net core中提供的用来读取json文件。例如:

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{

            string option1 = $"option1 = {this.Configuration["Option1"]}";
            string option2 = $"option2 = {this.Configuration["Option2"]}";
            string suboption1 = $"suboption1 = {this.Configuration["subsection:suboption1"]}";
            // 读取数组
            string name1 = $"Name={this.Configuration["student:0:Name"]} ";
            string age1 = $"Age= {this.Configuration["student:0:Age"]}";
            string name2 = $"Name={this.Configuration["student:1:Name"]}";
            string age2 = $"Age= {this.Configuration["student:1:Age"]}";
            // 输出
            app.Run(c => c.Response.WriteAsync(option1+"\r\n"+option2+ "\r\n"+suboption1+ "\r\n"+name1+ "\r\n"+age1+ "\r\n"+name2+ "\r\n"+age2));
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }
            else
            {
                app.UseHsts();
            }

            app.UseHttpsRedirection();
            app.UseMvc();
}

结果:

2、使用IOptions接口

1、定义实体类

public class MongodbHostOptions
{
        /// <summary>
        /// 连接字符串
        /// </summary>
        public string Connection { get; set; }
        /// <summary>
        /// 库
        /// </summary>
        public string DataBase { get; set; }

        public string Table { get; set; }
}

2、修改json文件

在appsettings.json文件中添加MongodbHost节点:

{
  "Logging": {
    "LogLevel": {
      "Default": "Warning"
    }
  },
  "option1": "value1_from_json",
  "option2": 2,
  "subsection": {
    "suboption1": "subvalue1_from_json"
  },
  "student": [
    {
      "Name": "Gandalf",
      "Age": "1000"
    },
    {
      "Name": "Harry",
      "Age": "17"
    }
  ],
  "AllowedHosts": "*",
  //MongoDb
  "MongodbHost": {
    "Connection": "mongodb://127.0.0.1:27017",
    "DataBase": "TemplateDb",
    "Table": "CDATemplateInfo"
  }
}

注意:

MongodbHost里面的属性名必须要和定义的实体类里面的属性名称一致。

3、在StartUp类里面配置

添加OptionConfigure方法绑定

private void OptionConfigure(IServiceCollection services)
{
      //MongodbHost信息
      services.Configure<MongodbHostOptions>(Configuration.GetSection("MongodbHost"));
}

在ConfigureServices方法中调用上面定义的方法:

public void ConfigureServices(IServiceCollection services)
{
     // 调用OptionConfigure方法
     OptionConfigure(services);
     services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
}

在控制器中使用,代码如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Options;

namespace ReadJsonDemo.Controllers
{
    [Route("api/[controller]")]
    [ApiController]
    public class MongodbController : ControllerBase
    {
        private readonly MongodbHostOptions _mongodbHostOptions;

        /// <summary>
        /// 通过构造函数注入
        /// </summary>
        /// <param name="mongodbHostOptions"></param>
        public MongodbController(IOptions<MongodbHostOptions> mongodbHostOptions)
        {
            _mongodbHostOptions = mongodbHostOptions.Value;
        }

        [HttpGet]
        public async Task Get()
        {
           await Response.WriteAsync("Connection:" + _mongodbHostOptions.Connection + "\r\nDataBase;" + _mongodbHostOptions.DataBase + "\r\nTable:" + _mongodbHostOptions.Table);
        }
    }
}

运行结果:

3、读取自定义json文件

在上面的例子中都是读取的系统自带的appsettings.json文件,那么该如何读取我们自己定义的json文件呢?这里可以使用ConfigurationBuilder类。

实例化类

var builder = new ConfigurationBuilder();

添加方式1

builder.AddJsonFile("path", false, true);

其中path表示json文件的路径,包括路径和文件名。

添加方式2

builder.Add(new JsonConfigurationSource {Path= "custom.json",Optional=false,ReloadOnChange=true }).Build()

具体代码如下:

private void CustomOptionConfigure(IServiceCollection services)
{
            IConfiguration _configuration;
            var builder = new ConfigurationBuilder();
            // 方式1
            //_configuration = builder.AddJsonFile("custom.json", false, true).Build();
            // 方式2
            _configuration = builder.Add(new JsonConfigurationSource {Path= "custom.json",Optional=false,ReloadOnChange=true }).Build();
            services.Configure<WebSiteOptions>(_configuration.GetSection("WebSiteConfig"));
}

ConfigureServices方法如下:

public void ConfigureServices(IServiceCollection services)
{
            // 调用OptionConfigure方法
            OptionConfigure(services);
            CustomOptionConfigure(services);
            services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
}

控制器代码如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Options;

namespace ReadJsonDemo.Controllers
{
    [Route("api/[controller]")]
    [ApiController]
    public class MongodbController : ControllerBase
    {
        private readonly MongodbHostOptions _mongodbHostOptions;

        private readonly WebSiteOptions _webSiteOptions;

        /// <summary>
        /// 通过构造函数注入
        /// </summary>
        /// <param name="mongodbHostOptions"></param>
        public MongodbController(IOptions<MongodbHostOptions> mongodbHostOptions,IOptions<WebSiteOptions> webSiteOptions)
        {
            _mongodbHostOptions = mongodbHostOptions.Value;
            _webSiteOptions = webSiteOptions.Value;
        }

        [HttpGet]
        public async Task Get()
        {
           await Response.WriteAsync("Connection:" + _mongodbHostOptions.Connection + "\r\nDataBase;" + _mongodbHostOptions.DataBase + "\r\nTable:" + _mongodbHostOptions.Table);
            await Response.WriteAsync("\r\n");
            await Response.WriteAsync("WebSiteName:" + _webSiteOptions.WebSiteName + "\r\nWebSiteUrl;" + _webSiteOptions.WebSiteUrl);
        }
    }
}

二、在类库中读取json文件

在上面的示例中都是直接在应用程序中读取的,那么如何在单独的类库中读取json文件呢?看下面的示例代码:

using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Options;
using System;
using System.Collections.Generic;
using System.IO;
using System.Text;

namespace Common
{
    public class JsonConfigHelper
    {
        public static T GetAppSettings<T>(string fileName, string key) where T : class, new()
        {
            // 获取bin目录路径
            var directory = AppContext.BaseDirectory;
            directory = directory.Replace("\\", "/");

            var filePath = $"{directory}/{fileName}";
            if (!File.Exists(filePath))
            {
                var length = directory.IndexOf("/bin");
                filePath = $"{directory.Substring(0, length)}/{fileName}";
            }

            IConfiguration configuration;
            var builder = new ConfigurationBuilder();

            builder.AddJsonFile(filePath, false, true);
            configuration = builder.Build();

            var appconfig = new ServiceCollection()
                .AddOptions()
                .Configure<T>(configuration.GetSection(key))
                .BuildServiceProvider()
                .GetService<IOptions<T>>()
                .Value;

            return appconfig;
        }
    }
}

注意:这里要添加如下几个程序集,并且要注意添加的程序集的版本要和.net core web项目里面的程序集版本一致,否则会报版本冲突的错误

  • 1、Microsoft.Extensions.Configuration
  • 2、Microsoft.Extensions.configuration.json
  • 3、Microsoft.Extensions.Options
  • 4、Microsoft.Extensions.Options.ConfigurationExtensions
  • 5、Microsoft.Extensions.Options

json文件如下:

{
  "WebSiteConfig": {
    "WebSiteName": "CustomWebSite",
    "WebSiteUrl": "https:localhost:12345"
  },
  "DbConfig": {
    "DataSource": "127.0.0.1",
    "InitialCatalog": "MyDb",
    "UserId": "sa",
    "Password": "123456"
  }
}

DbHostOptions实体类定义如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

namespace ReadJsonDemo
{
    public class DbHostOptions
    {
        public string DataSource { get; set; }

        public string InitialCatalog { get; set; }

        public string UserId { get; set; }

        public string Password { get; set; }
    }
}

注意:这里的DbHostOptions实体类应该建在单独的类库中,这里为了演示方便直接建在应用程序中了。

在控制器中调用:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Common;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Options;

namespace ReadJsonDemo.Controllers
{
    [Route("api/[controller]")]
    [ApiController]
    public class MongodbController : ControllerBase
    {
        private readonly MongodbHostOptions _mongodbHostOptions;

        private readonly WebSiteOptions _webSiteOptions;

        /// <summary>
        /// 通过构造函数注入
        /// </summary>
        /// <param name="mongodbHostOptions"></param>
        public MongodbController(IOptions<MongodbHostOptions> mongodbHostOptions,IOptions<WebSiteOptions> webSiteOptions)
        {
            _mongodbHostOptions = mongodbHostOptions.Value;
            _webSiteOptions = webSiteOptions.Value;
        }

        [HttpGet]
        public async Task Get()
        {
            DbHostOptions dbOptions = JsonConfigHelper.GetAppSettings<DbHostOptions>("custom.json", "DbConfig");
            await Response.WriteAsync("DataSource:" + dbOptions.DataSource + "\r\nInitialCatalog;" + dbOptions.InitialCatalog+ "\r\nUserId:"+dbOptions.UserId+ "\r\nPassword"+dbOptions.Password);
            await Response.WriteAsync("\r\n");
            await Response.WriteAsync("Connection:" + _mongodbHostOptions.Connection + "\r\nDataBase;" + _mongodbHostOptions.DataBase + "\r\nTable:" + _mongodbHostOptions.Table);
            await Response.WriteAsync("\r\n");
            await Response.WriteAsync("WebSiteName:" + _webSiteOptions.WebSiteName + "\r\nWebSiteUrl;" + _webSiteOptions.WebSiteUrl);
        }
    }
}

运行结果:

到此这篇关于ASP.NET CORE读取json格式配置文件的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • 详解ASP.NET Core 在 JSON 文件中配置依赖注入

    前言 在上一篇文章中写了如何在MVC中配置全局路由前缀,今天给大家介绍一下如何在在 json 文件中配置依赖注入. 在以前的 ASP.NET 4+ (MVC,Web Api,Owin,SingalR等)时候,都是提供了专有的接口以供使用第三方的依赖注入组件,比如我们常用的会使用 Autofac.Untiy.String.Net 等,这些第三放依赖注入组件基本上都提供了一套配置注入或者配置生命周期的方式,除了直接配置到类里面之外,还提供了要么使用 xml 文件,要么使用 json 等,那么在新的

  • ASP.NET Core应用程序配置文件AppSetting.json

    AppSetting.json 当我们使用空项目模板或Razor页面或MVC模板或Web API模板创建ASP.NET Core Web应用程序时,Visual Studio会自动为我们创建appsettings.json文件,如下图所示. appsettings.json文件是一个应用程序配置文件,用于存储配置设置,例如数据库连接字符串,任何应用程序范围的全局变量等.如果打开ASP.NET Core appsettings.json文件,则默认情况下会看到以下代码 这是由Visual Stud

  • ASP.NET core Web中使用appsettings.json配置文件的方法

    前言 最近在研究把asp.net程序移植到linux上,正好.net core出来了,就进行了学习. 移植代码基本顺利,但是发现.net core中没有ConfigurationManager,无法读写配置文件,单独写个xml之类的嫌麻烦,就谷歌了下,发现了个方法,遂记录如下,方便以后查找: 方法如下 配置文件结构 public class DemoSettings { public string MainDomain { get; set; } public string SiteName {

  • ASP.NET Core根据环境变量支持多个 appsettings.json配置文件

    一.背景 在项目开发的过程当中,开发环境与生产环境的配置肯定是不一样的.拿个最简单的例子来说,比如连接字符串这种东西,开发环境肯定不能连生产数据库.在之前的话,这种情况基本靠准备两个同名的配置文件来进行处理,然后你在本地就使用本地的配置文件,生产环境就使用生产环境的配置文件,十分麻烦. ASP.NET Core支持利用环境变量来动态配置 JSON 文件,下面就来看一下如何在项目中使用这样功能吧. 二.准备工作 ASP.NET Core在应用启动时读取环境变量ASPNETCORE_ENVIRONM

  • ASP.NET CORE读取json格式配置文件

    目录 一.在Startup类中读取json配置文件 1.使用Configuration直接读取 2.使用IOptions接口 1.定义实体类 2.修改json文件 3.在StartUp类里面配置 3.读取自定义json文件 实例化类 添加方式1 添加方式2 二.在类库中读取json文件 在.Net Framework中,配置文件一般采用的是XML格式的,.NET Framework提供了专门的ConfigurationManager来读取配置文件的内容,.net core中推荐使用json格式的

  • ASP.NET Core读取配置文件

    ASP.NET Core 中,可以使用 ConfigurationBuilder 对象来构建. 主要分为三部:配置数据源 -> ConfigurationBuilder -> 使用. 数据源可来自字典或配置文件. 数据源要么继承 IConfigurationSource ,要么从配置文件中读取. 1,来自字典 我们先使用字典存储键值对,来设置配置, test = 配置,然后使用 ConfigurationBuilder.Add() 方法添加数据源, Add 方法可以添加继承了 IConfigu

  • ASP.NET Core读取Request.Body的正确方法

    前言 相信大家在使用ASP.NET Core进行开发的时候,肯定会涉及到读取Request.Body的场景,毕竟我们大部分的POST请求都是将数据存放到Http的Body当中.因为笔者日常开发所使用的主要也是ASP.NET Core所以笔者也遇到这这种场景,关于本篇文章所套路的内容,来自于在开发过程中我遇到的关于Request.Body的读取问题.在之前的使用的时候,基本上都是借助搜索引擎搜索的答案,并没有太关注这个,发现自己理解的和正确的使用之间存在很大的误区.故有感而发,便写下此文,以作记录

  • 读取json格式为DataFrame(可转为.csv)的实例讲解

    有时候需要读取一定格式的json文件为DataFrame,可以通过json来转换或者pandas中的read_json(). import pandas as pd import json data = pd.DataFrame(json.loads(open('jsonFile.txt','r+').read()))#方法一 dataCopy = pd.read_json('jsonFile.txt',typ='frame') #方法二 pandas.read_json(path_or_buf

  • .Net Core读取Json配置文件的实现示例

    前言:在与传统的asp.net MVC项目相比,.net core项目在项目目录的文件结构上和功能上与前者都有很大的区别.例如:在.net core中使用Startup.cs取代Global.asax文件用于加载应用程序的配置和各种启动项.appsettings.json取代web.config文件用于存储应用程序所需的配置参数等等... OK!步入正题,下面来说一下如何读取Json配置文件中的参数. 第一种:使用IConfiguration接口 我们先在appsettings.json中配置好

  • ASP.NET Core Project.json文件(5)

    如果您的应用程序要做任何有用的工作,然后你需要库和框架来完成工作,这种存储和检索数据从一个数据库或呈现复杂的HTML. 在这一章,我们将讨论 project.json 文件.此文件使用 JavaScript 对象符号来存储配置信息,它是.NET 应用程序的核心.如果没有这个文件,你的项目就不会一个 ASP.NET Core项目.在这里,我们将讨论这个文件的一些最重要的特征.让我们双击 project.json 文件打开它. 目前,新建的项目中默认实现的project.json文件代码如下: {

  • PHP记录和读取JSON格式日志文件

    我们有时需要记录用户或者后端的某个操作事件的运行情况,可以使用后端语言如PHP将操作结果记录到日志文件中,方便测试和查找问题.尤其是这些在后端运行的而前端不能直接看到运行结果的,那么就可以用日志文件记录下来,如果你经常跟一些接口开发如支付宝接口.微信卡券接口打交道的话,日志记录就必不可少了. 我们讲的PHP记录日志,就是将日志信息写入到一个日志文件中,区别于内存日志.写入日志的流程是:打开日志文件(如果不存在则新创建),然后将日志内容追加到日志文件的后面,最后关闭日志文件. 本文中,我们将日志内

  • Shell实现读取ini格式配置文件方法

    ini文件格式一般都是由节.键.值三部分组成 格式: [第一节 ] 第一个键 = 值 第二个键 = 第二个值 [第二节 ] 第一个键 = val1,val2,val3 例子: 复制代码 代码如下: [COM] KINGGOO = jb51.net 其实这个作用没那么特别大,但多个shell如果每个配置信息都在shell文件里面写,懂的人还好,半懂+不仔细的人要如何改,改几个地方估计脚本就不能运行了.所以这样单独哪出来比较好些,而且可以多个shell使用一个ini文件(与扩展名无关)来做配置也可以

  • asp.net转出json格式客户端显示时间

    在服务器端利用 JavaScriptSerializer serializer = new JavaScriptSerializer(); return serializer.Serialize(obj); 对对像序列化, 对于时间类型得出结果为:\/Date(1216796600500)\/ 客户端解析的方式为: 复制代码 代码如下: function renderTime(data){ var da = eval('new ' + data.replace('/','','g').repla

随机推荐