Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从.net core中的appsettings.json获取值_C#_Asp.net Core_Configuration_Asp.net Core Mvc_Appsettings_Vscode - Fatal编程技术网

C# 从.net core中的appsettings.json获取值

C# 从.net core中的appsettings.json获取值,c#,asp.net-core,configuration,asp.net-core-mvc,appsettings,vscode,C#,Asp.net Core,Configuration,Asp.net Core Mvc,Appsettings,Vscode,不确定这里缺少什么,但我无法从.net核心应用程序中的appsettings.json获取值。我的appsettings.json为: { “应用设置”:{ “版本”:“一” } } 启动: public class Startup { private IConfigurationRoot _configuration; public Startup(IHostingEnvironment env) { _configuration = new Conf

不确定这里缺少什么,但我无法从.net核心应用程序中的appsettings.json获取值。我的appsettings.json为:

{
“应用设置”:{
“版本”:“一”
}
}
启动:

public class Startup
{
    private IConfigurationRoot _configuration;
    public Startup(IHostingEnvironment env)
    {
        _configuration = new ConfigurationBuilder()
    }
    public void ConfigureServices(IServiceCollection services)
    {
      //Here I setup to read appsettings        
      services.Configure<AppSettings>(_configuration.GetSection("AppSettings"));
    }
}
控制器:

public class HomeController : Controller
{
    private readonly AppSettings _mySettings;

    public HomeController(IOptions<AppSettings> settings)
    {
        //This is always null
        _mySettings = settings.Value;
    }
}
private readonly your_model myConfig;
public DemoController(IOptions<your_model> configOps)
{
    this.myConfig = configOps.Value;
}
公共类HomeController:控制器
{
私有只读应用程序设置_mySettings;
公共家庭控制器(IOPS设置)
{
//这总是空的
_mySettings=settings.Value;
}
}
\u mySettings
始终为空。这里有什么我遗漏的吗?

程序和启动课程 .NETCore2.x 您不需要在
启动
构造函数中新建
i配置
。其实现将由DI系统注入

//Program.cs
公共课程
{
公共静态void Main(字符串[]args)
{
BuildWebHost(args.Run();
}
公共静态IWebHost BuildWebHost(字符串[]args)=>
WebHost.CreateDefaultBuilder(args)
.UseStartup()
.Build();
}
//Startup.cs
公营创业
{
公共IHostingEnvironment主机环境{get;私有集;}
公共IConfiguration配置{get;private set;}
公共启动(IConfiguration配置,IHostingEnvironment环境)
{
this.HostingEnvironment=env;
配置=配置;
}
}
.NETCore1.x 您需要告诉
Startup
以加载appsettings文件

//Program.cs
公共课程
{
公共静态void Main(字符串[]args)
{
var host=new WebHostBuilder()
.UseKestrel()
.UseContentRoot(目录.GetCurrentDirectory())
.Useii整合()
.UseStartup()
.UseApplicationInsights()
.Build();
host.Run();
}
}
//Startup.cs
公营创业
{
公共IConfigurationRoot配置{get;private set;}
公共启动(IHostingEnvironment环境)
{
var builder=new ConfigurationBuilder()
.SetBasePath(env.ContentRootPath)
.AddJsonFile(“appsettings.json”,可选:false,reloadOnChange:true)
.AddJsonFile($“appsettings.{env.EnvironmentName}.json”,可选:true)
.AddenEnvironmentVariables();
this.Configuration=builder.Build();
}
...
}

获取价值 您可以通过多种方式从应用程序设置中获取配置的值:

  • 使用
    ConfigurationBuilder.GetValue的简单方法
  • 使用
假设您的
appsettings.json
如下所示:

{
    "ConnectionStrings": {
        ...
    },
    "AppIdentitySettings": {
        "User": {
            "RequireUniqueEmail": true
        },
        "Password": {
            "RequiredLength": 6,
            "RequireLowercase": true,
            "RequireUppercase": true,
            "RequireDigit": true,
            "RequireNonAlphanumeric": true
        },
        "Lockout": {
            "AllowedForNewUsers": true,
            "DefaultLockoutTimeSpanInMins": 30,
            "MaxFailedAccessAttempts": 5
        }
    },
    "Recaptcha": { 
        ...
    },
    ...
}
简单方法 您可以将整个配置注入控制器/类的构造函数(通过
IConfiguration
)并使用指定的键获取所需的值:

公共类AccountController:控制器
{
专用只读IConfiguration\u config;
公共帐户控制器(IConfiguration配置)
{
_config=config;
}
[异名]
公共IActionResult重置密码(int userId,字符串代码)
{
var vm=新的ResetPasswordViewModel
{
PasswordRequiredLength=\u config.GetValue(
“AppIdentitySettings:密码:RequiredLength”),
RequireUppercase=\u config.GetValue(
“AppIdentitySettings:密码:RequireUppercase”)
};
返回视图(vm);
}
}
期权模式 如果您只需要应用程序设置中的一个或两个值,
ConfigurationBuilder.GetValue
就可以很好地工作。但如果您想从应用程序设置中获取多个值,或者不想在多个位置硬编码这些键字符串,那么使用选项模式可能更容易。选项模式使用类来表示层次结构

要使用选项模式,请执行以下操作:

  • 定义类来表示结构
  • 注册这些类所绑定的配置实例
  • IOptions
    注入要获取值的控制器/类的构造函数中
  • 1.定义配置类以表示结构 您可以使用需要与应用程序设置中的键完全匹配的属性定义类。类的名称不必与应用程序设置中的节的名称匹配:

    公共类设备标识设置
    {
    公共用户设置用户{get;set;}
    公共密码设置密码{get;set;}
    公共LockoutSettings锁定{get;set;}
    }
    公共类用户设置
    {
    公共bool RequireUniqueEmail{get;set;}
    }
    公共类密码设置
    {
    public int RequiredLength{get;set;}
    公共bool RequireLowercase{get;set;}
    公共bool RequireUppercase{get;set;}
    公共bool RequireDigit{get;set;}
    公共bool RequireNonAlphanumeric{get;set;}
    }
    公共级锁具
    {
    为新用户{get;set;}允许的公共bool
    public int DefaultLockoutTimeSpanInMins{get;set;}
    public int MaxFailedAccessAttempts{get;set;}
    }
    
    2.注册配置实例 然后,您需要在启动中的
    ConfigureServices()
    中注册此配置实例:

    使用Microsoft.Extensions.Configuration;
    使用Microsoft.Extensions.DependencyInjection;
    ...
    命名空间DL.SO.UI.Web
    {
    公营创业
    {
    ...
    public void配置服务(IServiceCollection服务)
    {
    ...
    变量标识设置选项=
    _GetSection(“AppIdentitySettings”);
    服务。配置(identitySettingsSection);
    ...
    }
    ...
    }
    }
    
    3.注入眼压 最后,在要获取值的控制器/类上,需要通过构造函数注入
    IOptions

    public class DiscordServiceOptions
    {
        public string BotToken { get; set; }
    }
    
    public DiscordService(IOptions<DiscordServiceOptions> options, ILogger<DiscordService> logger)
    {
        _logger = logger;
        _client = new DiscordSocketClient();
        _client.Log += Log;
        _client.Ready += OnReady;
        _client.Disconnected += OnDisconnected;
        _client.LoginAsync(TokenType.Bot, options.Value.BotToken);
        _client.StartAsync();
    }
    
    公共类AccountContr
    
    public class Startup
    {
        public Startup(IHostingEnvironment env, IConfiguration config)
        {
            Environment = env;
            Configuration = config;
            var myconfig = Configuration["MyConfig"];
        }
    
        public IConfiguration Configuration { get; }
        public IHostingEnvironment Environment { get; }
    }
    
    using System;
    using System.IO;
    using Microsoft.Extensions.Configuration;
    
    namespace Custom
    {
        static class ConfigurationManager
        {
            public static IConfiguration AppSetting { get; }
            static ConfigurationManager()
            {
                AppSetting = new ConfigurationBuilder()
                        .SetBasePath(Directory.GetCurrentDirectory())
                        .AddJsonFile("YouAppSettingFile.json")
                        .Build();
            }
        }
    }
    
    {
        "GrandParent_Key" : {
            "Parent_Key" : {
                "Child_Key" : "value1"
            }
        },
        "Parent_Key" : {
            "Child_Key" : "value2"
        },
        "Child_Key" : "value3"
    }
    
    using Custom;
    
    string value1 = ConfigurationManager.AppSetting["GrandParent_Key:Parent_Key:Child_Key"];
    string value2 = ConfigurationManager.AppSetting["Parent_Key:Child_Key"];
    string value3 = ConfigurationManager.AppSetting["Child_Key"];
    
    // StartUp.cs
    public void ConfigureServices(IServiceCollection services)
    {
        ...
        // for get appsettings from anywhere
        services.AddSingleton(Configuration);
    }
    
    public class ContactUsController : Controller
    {
        readonly IConfiguration _configuration;
    
        public ContactUsController(
            IConfiguration configuration)
        {
            _configuration = configuration;
    
            // sample:
            var apiKey = _configuration.GetValue<string>("SendGrid:CAAO");
            ...
        }
    }
    
    var instructionSettings = new InstructionSettings();
    Configuration.Bind("InstructionSettings", instructionSettings);
    services.AddSingleton(typeof(IInstructionSettings), (serviceProvider) => instructionSettings);
    
    {  
     "InstructionSettings": {
        "Header": "uat_TEST",
        "SVSCode": "FICA",
        "CallBackUrl": "https://UATEnviro.companyName.co.za/suite/webapi/receiveCallback",
        "Username": "s_integrat",
        "Password": "X@nkmail6",
        "Defaults": {
        "Language": "ENG",
        "ContactDetails":{
           "StreetNumber": "9",
           "StreetName": "Nano Drive",
           "City": "Johannesburg",
           "Suburb": "Sandton",
           "Province": "Gauteng",
           "PostCode": "2196",
           "Email": "ourDefaultEmail@companyName.co.za",
           "CellNumber": "0833 468 378",
           "HomeNumber": "0833 468 378",
          }
          "CountryOfBirth": "710"
        }
      }
    
        public Startup(IConfiguration configuration)
        {
            Configuration = configuration;
    
            //here you go
            var myvalue = Configuration["Grandfather:Father:Child"];
    
        }
    
    public IConfiguration Configuration { get; }
    
      {
      "Grandfather": {
        "Father": {
          "Child": "myvalue"
        }
      }
    
        public static void GetSection()
        {
            Configuration = new ConfigurationBuilder()
                .SetBasePath(env.ContentRootPath)
                .AddJsonFile("appsettings.json")
                .Build();
    
            string BConfig = Configuration.GetSection("ConnectionStrings")["BConnection"];
    
        }
    
    private readonly your_model myConfig;
    public DemoController(IOptions<your_model> configOps)
    {
        this.myConfig = configOps.Value;
    }
    
    Host.CreateDefaultBuilder(args)
    
    {
      "ApplicationInsights":
        {
            "Instrumentationkey":"putrealikeyhere"
        }
    }
    
    [ApiController]
    [Route("[controller]")]
    public class WeatherForecastController : ControllerBase
    {
        private static readonly string[] Summaries = new[]
        {
            "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"
        };
    
        private readonly ILogger<WeatherForecastController> _logger;
        private readonly IConfiguration _configuration;
    
        public WeatherForecastController(ILogger<WeatherForecastController> logger, IConfiguration configuration)
        {
            _logger = logger;
            _configuration = configuration;
        }
    
        [HttpGet]
        public IEnumerable<WeatherForecast> Get()
        {
            var key = _configuration["ApplicationInsights:InstrumentationKey"];
    
            var rng = new Random();
            return Enumerable.Range(1, 5).Select(index => new WeatherForecast
            {
                Date = DateTime.Now.AddDays(index),
                TemperatureC = rng.Next(-20, 55),
                Summary = Summaries[rng.Next(Summaries.Length)]
            })
            .ToArray();
        }
    }
    
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Threading.Tasks;
    
    namespace ReadConfig.Bsl
    {
      public class AppSettings
      {
          private static AppSettings _instance;
          private static readonly object ObjLocked = new object();
          private IConfiguration _configuration;
    
          protected AppSettings()
          {
          }
    
          public void SetConfiguration(IConfiguration configuration)
          {
              _configuration = configuration;
          }
    
          public static AppSettings Instance
          {
              get
              {
                  if (null == _instance)
                  {
                      lock (ObjLocked)
                      {
                          if (null == _instance)
                              _instance = new AppSettings();
                      }
                  }
                  return _instance;
              }
          }
    
          public string GetConnection(string key, string defaultValue = "")
          {
              try
              {
                  return _configuration.GetConnectionString(key);
              }
              catch
              {
                  return defaultValue;
              }
          }
    
          public T Get<T>(string key = null)
          {
              if (string.IsNullOrWhiteSpace(key))
                  return _configuration.Get<T>();
              else
                  return _configuration.GetSection(key).Get<T>();
          }
    
          public T Get<T>(string key, T defaultValue)
          {
              if (_configuration.GetSection(key) == null)
                  return defaultValue;
    
              if (string.IsNullOrWhiteSpace(key))
                  return _configuration.Get<T>();
              else
                  return _configuration.GetSection(key).Get<T>();
          }
    
          public static T GetObject<T>(string key = null)
          {
              if (string.IsNullOrWhiteSpace(key))
                  return Instance._configuration.Get<T>();
              else
              {
                  var section = Instance._configuration.GetSection(key);
                  return section.Get<T>();
              }
          }
    
          public static T GetObject<T>(string key, T defaultValue)
          {
              if (Instance._configuration.GetSection(key) == null)
                  return defaultValue;
    
              if (string.IsNullOrWhiteSpace(key))
                  return Instance._configuration.Get<T>();
              else
                  return Instance._configuration.GetSection(key).Get<T>();
          }
      }
    }
    
    public Startup(IHostingEnvironment evm)
    {
        var builder = new ConfigurationBuilder()
          .SetBasePath(evm.ContentRootPath)
          .AddJsonFile("appsettings.json", true, true)
          .AddJsonFile($"appsettings.{evm.EnvironmentName}.json", true)
          .AddEnvironmentVariables();
        Configuration = builder.Build(); // load all file config to Configuration property 
        AppSettings.Instance.SetConfiguration(Configuration);       
    }
    
    {
      "Logging": {
        "LogLevel": {
          "Default": "Information",
          "Microsoft": "Warning",
          "Microsoft.Hosting.Lifetime": "Information"
        }
      },
      "AllowedHosts": "*",
      "ConnectionStrings": {
        "ConnectionString": "Data Source=localhost;Initial Catalog=ReadConfig;Persist Security Info=True;User ID=sa;Password=12345;"
      },
      "MailConfig": {
        "Servers": {
          "MailGun": {
            "Pass": "65-1B-C9-B9-27-00",
            "Port": "587",
            "Host": "smtp.gmail.com"
          }
        },
        "Sender": {
          "Email": "example@gmail.com",
          "Pass": "123456"
        }
      }
    }
    
    public class HomeController : Controller
    {
        public IActionResult Index()
        {
            var connectionString = AppSettings.Instance.GetConnection("ConnectionString");
            var emailSender = AppSettings.Instance.Get<string>("MailConfig:Sender:Email");
            var emailHost = AppSettings.Instance.Get<string>("MailConfig:Servers:MailGun:Host");
    
            string returnText = " 1. Connection String \n";
            returnText += "  " +connectionString;
            returnText += "\n 2. Email info";
            returnText += "\n Sender : " + emailSender;
            returnText += "\n Host : " + emailHost;
    
            return Content(returnText);
        }
    }
    
      "MyValues": {
        "Value1": "Xyz"
      }
    
    static IConfiguration conf = (new ConfigurationBuilder().SetBasePath(Directory.GetCurrentDirectory()).AddJsonFile("appsettings.json").Build());
            public static string myValue1= conf["MyValues:Value1"].ToString();
    
    
    public class HomeController : Controller
    {
        private readonly IConfiguration _mySettings;
    
        public HomeController (IConfiguration mySettings)
        {
             _mySettings= mySettings;
        }
     
        //ex: you can get value on below function 
        public IEnumerable<string> Get()
        {
            var result = _config.GetValue<string>("AppSettings:Version"); // "One"
            return new string[] { result.ToString() };
        }
    }
    
     public Startup(IConfiguration configuration)
     {
         Configuration = configuration;
    
     }
     public IConfiguration Configuration { get; }
    
    using System;
    using System.IO;
    using System.Reflection;
    using Microsoft.Extensions.Configuration;
    using Microsoft.AspNetCore.Hosting;
    using Microsoft.Extensions.Hosting;
    
    namespace API
    {
        public class Program
        {
            public static int Main(string[] args)
            {
                CreateHostBuilder(args).Build().Run();
                return 0;
            }
    
            public static IHostBuilder CreateHostBuilder(string[] args)
            {
                return Host.CreateDefaultBuilder(args)
                .ConfigureAppConfiguration(c =>
                {
                    var codeBase = Assembly.GetExecutingAssembly().Location;
                    var uri = new UriBuilder(codeBase);
                    var path = Uri.UnescapeDataString(uri.Path);
                    var assembyDirectory = Path.GetDirectoryName(path);
                    c.SetBasePath(assembyDirectory);
                })
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder.UseStartup<Startup>();
                })
                ;
            }
        }
    }
    
    using Microsoft.AspNetCore.Builder;
    using Microsoft.AspNetCore.Hosting;
    using Microsoft.Extensions.Configuration;
    using Microsoft.Extensions.DependencyInjection;
    using Model;
    
    namespace API
    {
        public class Startup
        {
            public IConfiguration Configuration { get; }
    
            public Startup(IConfiguration configuration)
            {
                Configuration = configuration;
            }
    
            // This method gets called by the runtime. Use this method to add services to the container.
            public void ConfigureServices(IServiceCollection services)
            {
                var myOptions = Configuration.To<ApiConfig>();
                services.AddAuthentication(myOptions.Secret);
                services.AddControllers();
            }
    
            // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
            public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
            {
                app.UseRouting();
                app.UseAuthentication();
                app.UseAuthorization();
                app.UseEndpoints(endpoints => { endpoints.MapControllers(); });
            }
        }
    }
    
    {
    "GlobalConfig": {
        "BlacklistedPairs": [ "USD", "USDT", "BUSD", "TUSD", "USDC", "DAI", "USDK" ]
    },
    "CoinTrackingConfig": {
        "Cookie1": "",
        "Cookie2": "",
        "ApiKey": "",
        "ApiSecret": "",
        "UpdateJobs": [
        {
            "Name": "Binance",
            "Path": "binance_api",
            "JobId": 42202
        },
        {
            "Name": "Bitfinex",
            "Path": "bitfinex_api",
            "JobId": 9708
        }
        ]
    },
    "DiscordConfig": {
        "BotToken": ""
    }
    }
    
    class GlobalConfig
    {
        public string[] BlacklistedPairs { get; set; }
    }
    class CoinTrackingConfig
    {
        public string Cookie1 { get; set; }
        public string Cookie2 { get; set; }
        public string ApiKey { get; set; }
        public string ApiSecret { get; set; }
        public List<CoinTrackingUpdateJobs> UpdateJobs { get; set; }
    }
    
    class CoinTrackingUpdateJobs
    {
        public string Name { get; set; }
        public string Path { get; set; }
        public int JobId { get; set; }
    }
    
    class DiscordConfig
    {
        public string BotToken { get; set; }
    }
    
    private class Config
    {
        private IConfigurationRoot _configuration;
        public Config(string config) => _configuration = new ConfigurationBuilder()
                .AddJsonFile(config)
                .Build();
    
        public T Get<T>() where T : new()
        {
            var obj = new T();
            _configuration.GetSection(typeof(T).Name).Bind(obj);
            return obj;
        }
    }
    
    public class DiscordServiceOptions
    {
        public string BotToken { get; set; }
    }
    
    public DiscordService(IOptions<DiscordServiceOptions> options, ILogger<DiscordService> logger)
    {
        _logger = logger;
        _client = new DiscordSocketClient();
        _client.Log += Log;
        _client.Ready += OnReady;
        _client.Disconnected += OnDisconnected;
        _client.LoginAsync(TokenType.Bot, options.Value.BotToken);
        _client.StartAsync();
    }
    
    static async Task Main(string[] args)
    {
        var _config = new Config("config.json");
    
        var globalConfig = config.Get<GlobalConfig>();
        var coinTrackingConfig = config.Get<CoinTrackingConfig>();
        var discordConfig = config.Get<DiscordConfig>();
    
        _services = new ServiceCollection()
            .AddOptions()
            .Configure<DiscordServiceOptions>(options =>
            {
                options.BotToken = discordConfig.BotToken;
            })
            .AddSingleton<IDiscordService, DiscordService>()
            .AddLogging(logging =>
            {
                logging.SetMinimumLevel(LogLevel.Trace);
                logging.AddNLog(new NLogProviderOptions
                {
                    CaptureMessageTemplates = true,
                    CaptureMessageProperties = true
                });
            })
            .BuildServiceProvider();
    }