.NET Core 读取appsettings.json配置文件 中文乱码

环境变量配置提供程序  
文件配置提供程序  
XML 配置提供程序  
ASP.NET Core 中的静态文件  
在 ASP.NET Core 中使用多个环境  Development、Staging、Production

IConfiguration 接口
命名空间:Microsoft.Extensions.Configuration
程序集:Microsoft.Extensions.Configuration.Abstractions.dll

ConfigureServices 方法  
Namespace:Microsoft.AspNetCore.Hosting
Assembly:Microsoft.AspNetCore.Hosting.dll

IServiceCollection
对于需要大量设置的功能,IServiceCollection 上有 Add{Service} 扩展方法。 例如,AddDbContext、AddDefaultIdentity、AddEntityFrameworkStores 和 AddRazorPages:
命名空间:Microsoft.Extensions.DependencyInjection
程序集:Microsoft.Extensions.DependencyInjection.Abstractions.dll

1、appsettings.json配置文件

{
  "Logging": {
    "IncludeScopes": false,
    "Debug": {
      "LogLevel": {
        "Default": "Warning"
      }
    },
    "Console": {
      "LogLevel": {
        "Default": "Warning"
      }
    },
    "LogLevel": {
      "Default": "Warning"
    }
  },
  "ConnectionStrings": {
    "DefaultConnection": "Server=.;Database=CoreDb;User ID=sa;Password=000000",
    "SqlConnection": "Server=.;Database=CoreDb;User ID=sa;Password=123456",
    "DevConnection": "Server=.;Database=CoreDb;User ID=sa;Password=1qaz",
    "MYSQLCONNSTR_": "",
    "SQLCONNSTR_": "",
    "SQLAZURECONNSTR_": "",
  },
  "AppSetting": {
    "AdminSafeList": "127.0.0.1;192.168.1.5;::1", //IP 安全列表
    "Cores": "https://localhost:44390,http://0.0.0.0:3201", //跨域
    "UploadFilesRootPath": "E:\\uploadfiles"
  },
  "Appsettings": {
    "SystemName": "Test .NET CORE",
    "Date": "2019-01-01",
    "Author": "Test"
  },
  "RedisOptions": {
    "Host": "127.0.0.1",
    "Prot": "1234"
  },
  "RabbitMQOptions": {},
  "ConsulOptions": {},
  "Authentication": {
    "WeChat": {
      "AppId": "微信AppID",
      "AppSecret": "微信AppSecret"
    }
  },
  "Weixin": {
    "AppId": "wxd9bae9d99a99f9ec"
  },
  "SMS": {
    "Url": "https://sms.yunpian.com/v1/sms/send.json"
  },
  "Service": {
    "Name": "clientservice",
    "Port": "5010",
    "DocName": "clientservice",
    "Version": "v1",
    "Title": "CAS Client Service API",
    "Description": "CAS Client Service API provide some API to help you get client information from CAS",
    "Contact": {
      "Name": "CAS 2.0 Team",
      "Email": "EdisonZhou@manulife.com"
    },
    "XmlFile": "Manulife.DNC.MSAD.IdentityServer4Test.ApiService01.xml"
  },
  "Identity": {
    "IP": "localhost",
    "Port": "5000",
    "Scheme": "Bearer"
  },
  "JwtSettings": {
    "Issuer": "http://localhost:5200",
    "Audience": "http://localhost:5200",
    "SecretKey": "ABCDEFGHIJKLMNOPQRSTUVWXYZ123456789"
  },
  "Certificates": {
    "CerPath": "certificate\\cas.clientservice.pfx",
    "Password": "manulife"
  },
  "TestName": "123456789",
  "AllowedHosts": "*"
}

2、Startup.cs文件

public void ConfigureServices(IServiceCollection services)
{
    string audience = string.Empty;
    string issuer = string.Empty;
    string secretKey = string.Empty;

    #region 从appsettings.json文件中读取JwtSettings相关配置信息

    services.Configure<JwtSettings>(Configuration.GetSection("JwtSettings"));
    JwtSettings setting = new JwtSettings();
    Configuration.Bind("JwtSettings", setting);

    audience = setting.Audience;
    issuer = setting.Issuer;
    secretKey = setting.SecretKey;

    string appId = Configuration["Authentication:WeChat:AppId"];
    string appSecret = Configuration["Authentication:WeChat:AppSecret"];

    #endregion

    services.Configure<JwtSettings>(Configuration.GetSection("JwtSettings"));

    services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
}

3、JwtSettings.cs文件

public class JwtSettings
{
    /// <summary>
    /// 证书颁发者
    /// </summary>
    public string Issuer { get; set; }

    /// <summary>
    /// 允许使用的角色
    /// </summary>
    public string Audience { get; set; }

    /// <summary>
    /// 加密字符串
    /// </summary>
    public string SecretKey { get; set; }
}

4、Controller 

using Microsoft.Extensions.Options;
using Microsoft.Extensions.Configuration;

public class HomeController : Controller
{
    private readonly IOptions<JwtSettings> _setting;
    private readonly JwtSettings _settingOptions;

    private readonly IConfiguration _configuration;

    public HomeController(IOptions<JwtSettings> setting)
    {
        _setting = setting;
        _settingOptions= setting.Value;
        _configuration = configuration;
    }

    public IActionResult Index()
    {
        JwtSettings setting = new JwtSettings();
        _configuration.Bind("JwtSettings", setting);

        string secretKey = _setting.Value.SecretKey;
        string issuer = _setting.Value.Issuer;
        string audience = _setting.Value.Audience;

        string secretKey = _settingOptions.SecretKey;
        string issuer = _settingOptions.Issuer;
        string audience = _settingOptions.Audience;

        return View();
    }
}

=========【.NET Core 类库 读取 .json 文件】=========

【注意:appsettings.json 右键属性 -> 将“复制到输出目录”值改为“始终复制”】

【注意:appsettings.json 右键属性 -> 将“复制到输出目录”值改为“始终复制”】

【注意:appsettings.json 右键属性 -> 将“复制到输出目录”值改为“始终复制”】

1、创建一个 .NET Core 类库(Test.CoreLibrary),新建 ConfigManager.cs 类

管理 NuGet 程序包
Microsoft.Extensions.Configuration
Microsoft.Extensions.Configuration.Json

using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Configuration.Json;

namespace Test.CoreLibrary
{
    /// <summary>
    /// 读取配置文件
    /// NuGet: Install-Package Microsoft.Extensions.Configuration
    /// NuGet: Install-Package Microsoft.Extensions.Configuration.Abstractions
    /// NuGet: Install-Package Microsoft.Extensions.Configuration.Json
    /// </summary>
    public class ConfigManager
    {
        public static IConfiguration Configuration { get; set; }

        static ConfigManager()
        {
            //ReloadOnChange = true 当appsettings.json被修改时重新加载            

            #region 方式1(ok)
            Configuration = new ConfigurationBuilder()
                .Add(new JsonConfigurationSource
                {
                    Path = "appsettings.json",
                    ReloadOnChange = true
                }).Build();
            #endregion

            #region 方式2(ok)
            //Configuration = new ConfigurationBuilder()
            //    .SetBasePath(Directory.GetCurrentDirectory())
            //    .AddJsonFile("appsettings.json").Build();
            #endregion

            #region 方式3读取过个配置文件(ok)
            Configuration = configuration;

            var builder = new ConfigurationBuilder()
               .SetBasePath(env.ContentRootPath)
               .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
               .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
               .AddJsonFile("configuration.json", optional: true, reloadOnChange: true)
               .AddEnvironmentVariables();
            Configuration = builder.Build();
            #endregion
        }
    }
}

=========【Program.cs 添加json文件】=========

using Autofac.Extensions.DependencyInjection;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Hosting;

namespace WebAPI
{
    public class Program
    {
        public static void Main(string[] args)
        {
            CreateHostBuilder(args).Build().Run();
        }

        public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
            .ConfigureAppConfiguration(conf =>
            {
                conf.AddJsonFile("configurations.json", false, true);
            })
            .UseServiceProviderFactory(new AutofacServiceProviderFactory())
            .ConfigureWebHostDefaults(webBuilder =>
            {
                webBuilder.UseStartup<Startup>();
            });
    }
}

2、在controller中使用 ConfigManager 类,读取 appsettings.json 配置文件  

using System;
using System.IO;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Configuration;
using Test.CoreLibrary;

namespace Web.Test1.Controllers
{
    public class TestController : Controller
    {
        public IActionResult Index()
        {
            //获取应用程序根目录
            var configBasePath = Directory.GetCurrentDirectory();

            //获取bin目录路径
            var baseDirectory = AppContext.BaseDirectory;

            var conn = ConfigManager.Configuration.GetConnectionString("DefaultConnection");
            var sqlConn = ConfigManager.Configuration.GetConnectionString("SqlConnection");
            var devConn = ConfigManager.Configuration.GetConnectionString("DevConnection");

            //读取一级配置节点配置
            var name = ConfigManager.Configuration["TestName"];
            //读取二级子节点配置
            var a = ConfigManager.Configuration["Appsettings:SystemName"];
            var b = ConfigManager.Configuration["Appsettings:Author"];

            var name1 = ConfigManager.Configuration.GetSection("TestName").Value;
            var a1 = ConfigManager.Configuration.GetSection("Appsettings:SystemName").Value;
            var b1 = ConfigManager.Configuration.GetSection("Appsettings:Author").Value;

            return View();
        }
    }
}

========= 在Controller中直接依赖注入IConfiguration =========

using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Configuration;

namespace Project.Controllers
{
    [Route("[controller]/[action]")]
    public class WeatherForecastController : Controller
    {
        private IConfiguration _configuration;

        public WeatherForecastController(IConfiguration configuration)
        {
            _configuration = configuration;
        }

        public IActionResult Index()
        {
            var connection = _configuration["ConnectionStrings:DefaultConnection"];
            return Ok();
        }
    }
}

读取appsetting.json文件

static IConfigurationRoot config = new ConfigurationBuilder().AddJsonFile("appsettings.json").Build();
config["AccessKey"];
config["SecretKey"];
config["Host"];

========= 读取appsettings.json中文乱码 =========
【工具】【自定义】【命令】【添加命令】【文件】【高级保存选择(V)...】【关闭】
打开【appsettings.json】文件,选择【高级保存选择(V)...】【编码】【Unicode (UTF-8 带签名) - 代码页 65001】

========= .NET Framework读取App.config文件配置信息 =========

<?xml version="1.0" encoding="utf-8"?>
<configuration>
	<connectionStrings>
		<add name="SqlConnection" connectionString="Data Source=.;Initial Catalog=db;User ID=sa;Password=000000;" providerName="System.Data.SqlClient" />
	</connectionStrings>
	<appSettings>
		<add key="Code" value="123456"/>
	</appSettings>
</configuration>

*

public readonly string dbConnectionStr = ConfigurationManager.ConnectionStrings["SqlConnection"].ConnectionString;
public readonly string sql = ConfigurationManager.AppSettings["Code"];

*
*
*

  • 3
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值