รับค่าจาก appsettings.json ใน. net core


162

ไม่แน่ใจว่าฉันทำอะไรหายไปที่นี่ แต่ฉันไม่สามารถรับค่าจาก appsettings.json ของฉันในแอปพลิเคชัน. net หลักของฉัน ฉันมี appsettings.json ของฉันเป็น:

{
    "AppSettings": {
        "Version": "One"
    }
}

เริ่มต้น:

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 AppSettings
{
    public string Version{ get; set; }
}

ควบคุม:

public class HomeController : Controller
{
    private readonly AppSettings _mySettings;

    public HomeController(IOptions<AppSettings> settings)
    {
        //This is always null
        _mySettings = settings.Value;
    }
}

_mySettingsเป็นโมฆะเสมอ มีบางอย่างที่ฉันขาดหายไปที่นี่หรือไม่?


3
โปรดอ่านเอกสารเกี่ยวกับวิธีใช้การกำหนดค่า คุณตั้งค่าการกำหนดค่าในคลาสเริ่มต้นของคุณไม่ถูกต้อง
กระตุ้น

ขอบคุณสำหรับเอกสาร สิ่งนี้มีประโยชน์
aman

สิ่งนี้สามารถลดความซับซ้อนได้เพียงแค่ใช้การฉีดพึ่งพาของการกำหนดค่า ICon ซึ่งอธิบายไว้ที่นี่coding-issues.com/2018/10/…
Ranadheer Reddy

คำตอบ:


229

โปรแกรมและคลาสเริ่มต้น

.NET Core 2.x

คุณไม่จำเป็นต้องสร้างสิ่งใหม่IConfigurationในตัวStartupสร้าง การใช้งานจะถูกฉีดโดยระบบ DI

// Program.cs
public class Program
{
    public static void Main(string[] args)
    {
        BuildWebHost(args).Run();
    }

    public static IWebHost BuildWebHost(string[] args) =>
        WebHost.CreateDefaultBuilder(args)
            .UseStartup<Startup>()
            .Build();            
}

// Startup.cs
public class Startup
{
    public IHostingEnvironment HostingEnvironment { get; private set; }
    public IConfiguration Configuration { get; private set; }

    public Startup(IConfiguration configuration, IHostingEnvironment env)
    {
        this.HostingEnvironment = env;
        this.Configuration = configuration;
    }
}

.NET Core 1.x

คุณต้องบอกStartupให้โหลดไฟล์การตั้งค่า

// Program.cs
public class Program
{
    public static void Main(string[] args)
    {
        var host = new WebHostBuilder()
            .UseKestrel()
            .UseContentRoot(Directory.GetCurrentDirectory())
            .UseIISIntegration()
            .UseStartup<Startup>()
            .UseApplicationInsights()
            .Build();

        host.Run();
    }
}

//Startup.cs
public class Startup
{
    public IConfigurationRoot Configuration { get; private set; }

    public Startup(IHostingEnvironment env)
    {
        var builder = new ConfigurationBuilder()
            .SetBasePath(env.ContentRootPath)
            .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
            .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
            .AddEnvironmentVariables();

        this.Configuration = builder.Build();
    }
    ...
}

รับค่า

มีหลายวิธีที่คุณสามารถรับค่าที่คุณกำหนดจากการตั้งค่าแอพ:

สมมติว่า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) และรับค่าที่คุณต้องการด้วยคีย์ที่ระบุ:

public class AccountController : Controller
{
    private readonly IConfiguration _config;

    public AccountController(IConfiguration config)
    {
        _config = config;
    }

    [AllowAnonymous]
    public IActionResult ResetPassword(int userId, string code)
    {
        var vm = new ResetPasswordViewModel
        {
            PasswordRequiredLength = _config.GetValue<int>(
                "AppIdentitySettings:Password:RequiredLength"),
            RequireUppercase = _config.GetValue<bool>(
                "AppIdentitySettings:Password:RequireUppercase")
        };

        return View(vm);
    }
}

รูปแบบตัวเลือก

การConfigurationBuilder.GetValue<T>ทำงานที่ยอดเยี่ยมหากคุณต้องการเพียงหนึ่งหรือสองค่าจากการตั้งค่าแอพ แต่ถ้าคุณต้องการที่จะได้รับค่าหลายรายการจากการตั้งค่า app หรือคุณไม่ต้องการที่จะยากรหัสสตริงที่สำคัญผู้ที่อยู่ในสถานที่ต่างๆก็อาจจะง่ายต่อการใช้รูปแบบตัวเลือก รูปแบบตัวเลือกใช้คลาสเพื่อแสดงลำดับชั้น / โครงสร้าง

วิธีใช้รูปแบบตัวเลือก:

  1. กำหนดคลาสเพื่อแสดงโครงสร้าง
  2. ลงทะเบียนอินสแตนซ์การกำหนดค่าที่คลาสเหล่านั้นผูกไว้
  3. ฉีด IOptions<T>เข้าไปใน Constructor ของคอนโทรลเลอร์ / คลาสที่คุณต้องการรับค่า

1. กำหนดคลาสการกำหนดค่าเพื่อแสดงโครงสร้าง

คุณสามารถกำหนดคลาสด้วยคุณสมบัติที่ต้องตรงกับคีย์ในการตั้งค่าแอพของคุณ ชื่อของคลาสไม่จำเป็นต้องตรงกับชื่อของส่วนในการตั้งค่าแอพ:

public class AppIdentitySettings
{
    public UserSettings User { get; set; }
    public PasswordSettings Password { get; set; }
    public LockoutSettings Lockout { get; set; }
}

public class UserSettings
{
    public bool RequireUniqueEmail { get; set; }
}

public class PasswordSettings
{
    public int RequiredLength { get; set; }
    public bool RequireLowercase { get; set; }
    public bool RequireUppercase { get; set; }
    public bool RequireDigit { get; set; }
    public bool RequireNonAlphanumeric { get; set; }
}

public class LockoutSettings
{
    public bool AllowedForNewUsers { get; set; }
    public int DefaultLockoutTimeSpanInMins { get; set; }
    public int MaxFailedAccessAttempts { get; set; }
}

2. ลงทะเบียนอินสแตนซ์การกำหนดค่า

จากนั้นคุณต้องลงทะเบียนอินสแตนซ์การกำหนดค่านี้ConfigureServices()ในตอนเริ่มต้น:

using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
...

namespace DL.SO.UI.Web
{
    public class Startup
    {
        ...
        public void ConfigureServices(IServiceCollection services)
        {
            ...
            var identitySettingsSection = 
                _configuration.GetSection("AppIdentitySettings");
            services.Configure<AppIdentitySettings>(identitySettingsSection);
            ...
        }
        ...
    }
}

3. ฉีด IOptions

สุดท้ายบนคอนโทรลเลอร์ / คลาสที่คุณต้องการรับค่าคุณต้องแทรกIOptions<AppIdentitySettings>ผ่าน Constructor:

public class AccountController : Controller
{
    private readonly AppIdentitySettings _appIdentitySettings;

    public AccountController(IOptions<AppIdentitySettings> appIdentitySettingsAccessor)
    {
        _appIdentitySettings = appIdentitySettingsAccessor.Value;
    }

    [AllowAnonymous]
    public IActionResult ResetPassword(int userId, string code)
    {
        var vm = new ResetPasswordViewModel
        {
            PasswordRequiredLength = _appIdentitySettings.Password.RequiredLength,
            RequireUppercase = _appIdentitySettings.Password.RequireUppercase
        };

        return View(vm);
    }
}

ฉันจะเข้าถึงค่าในคลาสที่เก็บข้อมูลของฉันได้อย่างไร
Lukas Hieronimus Adler

1
@LukasHieronimusAdler: คุณอาจต้องการที่จะใช้แทนIOptionsSnapshot<T> IOptions<T>คุณสามารถดูที่บทความนี้: offer.solutions/blog/articles/2017/02/17/ … ฉันไม่มีโอกาสลองด้วยตัวเอง
David Liang Liang

2
คุณสามารถทำให้มันง่ายเหมือนตัวอย่างหรือไม่?
Syaiful Nizam Yahya

8
ช่างเป็นก้าวถอยหลังที่น่ากลัวไปจากกองทั้งหมด. net
Aaron

4
ตกลงดังนั้นสำหรับ. NET Core 3 คุณต้องใช้ Microsoft.Extensions.Options.ConfigurationExtensions แพ็คเกจและมันใช้งานได้ดี
Tomas Bruckner

50

เพียงสร้างไฟล์ AnName.cs และวางรหัสต่อไปนี้

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();
        }
    }
}

ต้องแทนที่ชื่อไฟล์ YouAppSettingFile.json ด้วยชื่อไฟล์ของคุณ
ไฟล์. json ของคุณควรมีลักษณะดังนี้

{
    "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"];

3
อย่าใช้สิ่งนี้ในการผลิต วิธีนี้เป็นสิ่งที่ทำให้หน่วยความจำรั่วในเว็บ API ของเรา หากคุณใช้ netcore คุณสามารถฉีด IConfiguration ได้ทุกที่เพียงดูคำตอบข้างต้น
André Mantas

49

การเพิ่มคำตอบของ David Liang สำหรับCore 2.0 -

appsettings.json ไฟล์ถูกลิงค์ไป ASPNETCORE_ENVIRONMENTตัวแปร

ASPNETCORE_ENVIRONMENTสามารถตั้งค่าใด ๆ แต่สามค่าได้รับการสนับสนุนโดยกรอบ: Development, และStaging ProductionหากASPNETCORE_ENVIRONMENTไม่ได้ตั้งค่าจะเป็นการตั้งค่าเริ่มต้นเป็นProductionไม่ได้ตั้งค่าก็จะเริ่มต้น

สำหรับค่าทั้งสามค่าเหล่านี้appsettings.ASPNETCORE_ENVIRONMENT.jsonไฟล์เหล่านี้ได้รับการสนับสนุนนอกกรอบ - appsettings.Staging.json,appsettings.Development.jsonและappsettings.Production.json

ไฟล์ json การตั้งค่าแอปพลิเคชันสามตัวด้านบนสามารถใช้เพื่อกำหนดค่าสภาพแวดล้อมหลาย ๆ

ตัวอย่าง - appsettings.Staging.json

{
    "Logging": {
        "IncludeScopes": false,
        "LogLevel": {
            "System": "Information",
            "Microsoft": "Information"
        }
    },
    "MyConfig": "My Config Value for staging."
}

ใช้Configuration["config_var"]เพื่อดึงค่าการกำหนดค่าใด ๆ

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; }
}

1
แล้ววัตถุที่ซ้อนกันล่ะ?
Arthur Attout

8
วัตถุที่ซ้อนกันสามารถรับได้ด้วยการกำหนดค่า ["MyConfig: SomethingNested"]
WeHaveCookies

1
ที่สามารถเห็นได้ในแฟ้มgithub.com/aspnet/AspNetCore/blob/master/src/DefaultBuilder/src/...ที่บรรทัด 167 ASP.NET หลักขณะโหลด+appsettings.json appsettings.{env.EnvironmentName}.jsonดังนั้นคำสั่งที่ ASP.NET Core โหลดไฟล์การพัฒนา Staging และ Production appsettings.json เท่านั้นจึงไม่ถูกต้องในขณะนี้
mvdgun

1
ดังนั้นฉันควรตั้งค่าตัวแปร Windows ASPNETCORE_ENVIRONMENTทุกครั้งหรือไม่ ทุกอย่างเป็นวิธีที่ง่ายขึ้นใน. Net 4. ผู้คลั่งไคล้ JSON เหล่านี้ทำให้พลาดครั้งใหญ่
Toolkit

@Toolkit คุณสามารถตั้งค่าตัวแปรสภาพแวดล้อมทั่วโลก docs.microsoft.com/en-us/aspnet/core/fundamentals/…
Aseem Gautam

29

ฉันคิดว่าวิธีที่ง่ายที่สุดคือ DI ตัวอย่างของการเข้าถึงตัวควบคุม

// 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");
        ...
    }
}

5
อ่านคำตอบอื่น ๆ นี้ควรจะดีที่สุด
ฮาร์วีย์

ฉันหายไป services.AddSingleton(Configuration);ตอนนี้ใช้งานได้
Arthur Medeiros

12

ในตัวสร้างของคลาสเริ่มต้นคุณสามารถเข้าถึง appsettings.json และการตั้งค่าอื่น ๆ อีกมากมายโดยใช้ออบเจ็กต์ IConfiguration แบบฉีด:

Startup.cs Constructor

    public Startup(IConfiguration configuration)
    {
        Configuration = configuration;

        //here you go
        var myvalue = Configuration["Grandfather:Father:Child"];

    }

public IConfiguration Configuration { get; }

เนื้อหาของ appsettings.json

  {
  "Grandfather": {
    "Father": {
      "Child": "myvalue"
    }
  }

2
มันเป็น 'การกำหนดค่า ["ปู่: พ่อ: ​​เด็ก"]' ไวยากรณ์ที่ช่วยฉัน
Jacques Olivier

2
นี่คือคำตอบที่โดดเด่นในแบบที่ชัดเจนชัดเจนและตรงประเด็น การสื่อสารที่ยอดเยี่ยม
jolySoft

6
    public static void GetSection()
    {
        Configuration = new ConfigurationBuilder()
            .SetBasePath(env.ContentRootPath)
            .AddJsonFile("appsettings.json")
            .Build();

        string BConfig = Configuration.GetSection("ConnectionStrings")["BConnection"];

    }

4
คำตอบที่ไม่สมบูรณ์
Carlos ABS

1

ในกรณีของฉันมันง่ายเหมือนการใช้วิธีการผูก () ในวัตถุการตั้งค่า จากนั้นเพิ่มวัตถุเป็นซิงเกิลตันใน DI

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"
    }
  }

1

สำหรับ ASP.NET Core 3.1 คุณสามารถปฏิบัติตามคำแนะนำนี้:

https://docs.microsoft.com/en-us/aspnet/core/fundamentals/configuration/?view=aspnetcore-3.1

เมื่อคุณสร้างโครงการ ASP.NET Core 3.1 ใหม่คุณจะมีบรรทัดการกำหนดค่าต่อไปนี้ในProgram.cs:

Host.CreateDefaultBuilder(args)

สิ่งนี้ทำให้สิ่งต่อไปนี้:

  1. ChainedConfigurationProvider: เพิ่ม IConfiguration ที่มีอยู่เป็นแหล่งที่มา ในกรณีการกำหนดค่าเริ่มต้นเพิ่มการกำหนดค่าโฮสต์และตั้งเป็นแหล่งแรกสำหรับการกำหนดค่าแอพ
  2. appsettings.json โดยใช้ผู้ให้บริการกำหนดค่า JSON
  3. appsettings.Environment.json โดยใช้ผู้ให้บริการการกำหนดค่า JSON ตัวอย่างเช่น appsettings.Production.json และ appsettings.Development.json
  4. ความลับของแอพเมื่อแอพทำงานในสภาพแวดล้อมการพัฒนา
  5. ตัวแปรสภาพแวดล้อมโดยใช้ผู้ให้บริการกำหนดค่าตัวแปรสภาพแวดล้อม
  6. อาร์กิวเมนต์บรรทัดคำสั่งโดยใช้ผู้ให้บริการกำหนดค่าบรรทัดคำสั่ง

ซึ่งหมายความว่าคุณสามารถฉีดIConfigurationและดึงค่าด้วยคีย์สตริงแม้กระทั่งค่าที่ซ้อนกัน ชอบIConfiguration["Parent:Child"];

ตัวอย่าง:

appsettings.json

{
  "ApplicationInsights":
    {
        "Instrumentationkey":"putrealikeyhere"
    }
}

WeatherForecast.cs

[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();
    }
}

ฉันจะเรียนรู้เพิ่มเติมเกี่ยวกับIConfiguration["Parent:Child"]ไวยากรณ์ได้ที่ไหน
xr280xr

0

ฉันคิดว่าตัวเลือกที่ดีที่สุดคือ:

  1. สร้างคลาสโมเดลเป็นสกีมา config

  2. ลงทะเบียนใน DI: services.Configure (Configuration.GetSection ("democonfig"));

  3. รับค่าเป็นวัตถุต้นแบบจาก DI ในคอนโทรลเลอร์ของคุณ:

    private readonly your_model myConfig;
    public DemoController(IOptions<your_model> configOps)
    {
        this.myConfig = configOps.Value;
    }

0

จาก Asp.net core 2.2 ขึ้นไปคุณสามารถเขียนโค้ดได้ดังนี้

ขั้นตอนที่ 1 สร้างไฟล์คลาส AppSettings

ไฟล์นี้มีวิธีการบางอย่างเพื่อช่วยให้ได้รับมูลค่าโดยคีย์จากไฟล์ appsettings.json ดูเหมือนรหัสด้านล่าง:

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>();
      }
  }
}

ขั้นตอนที่ 2 การกำหนดค่าเริ่มต้นสำหรับวัตถุ AppSettings

เราจำเป็นต้องประกาศและโหลดไฟล์ appsettings.json เมื่อแอปพลิเคชั่นเริ่มต้นและโหลดข้อมูลการกำหนดค่าสำหรับวัตถุ AppSettings เราจะทำงานนี้ในตัวสร้างของไฟล์ Startup.cs กรุณาแจ้งให้ทราบสายAppSettings.Instance.SetConfiguration(Configuration);

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);       
}

ตกลงตอนนี้ฉันมีไฟล์ appsettings.json พร้อมกับปุ่มบางปุ่มดังต่อไปนี้:

{
  "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"
    }
  }
}

ขั้นตอนที่ 3 อ่านค่ากำหนดจากการกระทำ

ฉันสาธิตการกระทำในตัวควบคุมหน้าแรกดังนี้:

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);
    }
}

และด้านล่างคือผลลัพธ์:

คลิกเพื่อดูผลลัพธ์

สำหรับข้อมูลเพิ่มเติมคุณสามารถดูบทความรับค่าจาก appsettings.jsonใน asp.net หลักสำหรับรหัสรายละเอียดเพิ่มเติม


0

ง่าย ๆ : ใน appsettings.json

  "MyValues": {
    "Value1": "Xyz"
  }

ในไฟล์. cs:

static IConfiguration conf = (new ConfigurationBuilder().SetBasePath(Directory.GetCurrentDirectory()).AddJsonFile("appsettings.json").Build());
        public static string myValue1= conf["MyValues:Value1"].ToString();
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.