简书链接:aspnetcore读取配置不同文件的两种方法 文章字数:279,阅读全文大约需要1分钟 第一种是读取appsettings.json 新建的项目它默认是和源代码根目录在一起的,内容如下
1 2 3 4 5 6 7 8 9 10 11 { "Logging": { "LogLevel": { "Default": "Information", "Microsoft.AspNetCore": "Warning" } }, "AllowedHosts": "*" }
在程序启动的Program.cs时就有如下代码
1 2 3 4 5 6 7 using coreapiauth; using coreapiauth.TestWebApi.AuthCenter.Utility; using Microsoft.AspNetCore.Authentication.JwtBearer; using Microsoft.IdentityModel.Tokens; using System.Text; var builder = WebApplication.CreateBuilder(args);
所以拿到builder就可以了
1 2 3 4 5 6 if (builder.Configuration["SecurityKey"]==null|| builder.Configuration["SecurityKey"].Length==0) { throw new Exception("please defined key on appsettings.json [SecurityKey issuer audience] is must!"); }
在控制器中如何拿到呢?
这就需要定义构造方法了,之前默认构造方法是不带参数的,改成带参数的,不过看上去不是复写方法,和java语法不同,这种注入不需要定义什么注解它就能给你传递进来。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 using Microsoft.AspNetCore.Authentication; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Logging; using Newtonsoft.Json; //using TestWebApi.AuthCenter.Utility; namespace TestWebApi.AuthCenter.Controllers { [Route("api/[controller]")] [ApiController] public class AuthController : ControllerBase { //需要注入的服务 private readonly ILogger<AuthController> _logger; private readonly IConfiguration _configuration; private readonly IJwtService _jwtService; public AuthController(IConfiguration configuration, ILogger<AuthController> logger, IJwtService jwtService) { _configuration = configuration; _logger = logger; _jwtService = jwtService; } } }
或者
1 2 3 4 5 6 7 private readonly IConfiguration _iConfiguration = null; public ConfigurationController(IConfiguration configuration) { this._iConfiguration = configuration; }
第二种 这种会生成一个你的程序名(.dll|.exe).config这种似乎不方便调试在源代码阶段,这个配置文件和源代码并不是在一起的,而且它默认是没有的。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 using System.Configuration; using System.Data.SqlClient; using webapi_test.consts; using ConfigurationManager = System.Configuration.ConfigurationManager; namespace webapi_test.utils { public class ConfigUtil { public static void init() { Configuration cfa = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); if (cfa.AppSettings.Settings["LaunchTime"] == null) { cfa.AppSettings.Settings.Add("LaunchTime", ""); cfa.AppSettings.Settings.Add("DataSource", ""); cfa.AppSettings.Settings.Add("InitialCatalog", ""); cfa.AppSettings.Settings.Add("Password", ""); cfa.AppSettings.Settings.Add("UserID", "SA"); cfa.AppSettings.Settings.Add("ConnectTimeout", "15"); } else { String DataSource = cfa.AppSettings.Settings["DataSource"]?.Value??""; if (DataSource != null&&DataSource.Length>0) { String InitialCatalog = cfa.AppSettings.Settings["InitialCatalog"]?.Value??""; String UserID = cfa.AppSettings.Settings["UserID"]?.Value??""; int ConnectTimeout =ParseUtil.parseInt(cfa.AppSettings.Settings["ConnectTimeout"]?.Value ?? "15"); String Password = cfa.AppSettings.Settings["Password"]?.Value ?? ""; Consts.strConn= SercretCS. Conn = new SqlConnectionStringBuilder() { DataSource = DataSource, InitialCatalog = InitialCatalog,// UserID = UserID, ConnectTimeout = ConnectTimeout, Password = Password }.ConnectionString; } } cfa.AppSettings.Settings["launchTime"].Value = DateTime.Now.ToString(); cfa.Save(); } } }
如果写入成功内容如下:
1 2 3 4 5 6 7 8 9 10 11 <?xml version="1.0" encoding="utf-8"?> <configuration> <appSettings> <add key="LaunchTime" value="xxx" /> <add key="DataSource" value="xxx" /> <add key="InitialCatalog" value="xxx" /> <add key="Password" value="xxx" /> <add key="UserID" value="SA" /> <add key="ConnectTimeout" value="15" /> </appSettings> </configuration>
还有一种
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 public static string GetConfiguration(string configKey) { var builder = new ConfigurationBuilder() .SetBasePath(Directory.GetCurrentDirectory()) .AddJsonFile("appsettings.json"); var config = builder.Build(); if (configKey.Contains(":")) { return config.GetSection(configKey).Value; } else { return config[configKey]; } } var aa= GetConfig.GetConfiguration("a:a1"); var aaa= GetConfig.GetConfiguration("a:a2");
json
1 2 3 4 5 //过期策略 "a": { "a1": "333", "a2": "222" },
最后一种直接读取json文件,