appsettings.json에서
{
"MyArray": [
"str1",
"str2",
"str3"
]
}
Startup.cs에서
public void ConfigureServices(IServiceCollection services)
{
services.AddSingleton<IConfiguration>(Configuration);
}
HomeController에서
public class HomeController : Controller
{
private readonly IConfiguration _config;
public HomeController(IConfiguration config)
{
this._config = config;
}
public IActionResult Index()
{
return Json(_config.GetSection("MyArray"));
}
}
위의 코드가 있는데 null이 있습니다. 어떻게 배열을 얻는가?
답변
첫 번째 항목의 값을 선택하려면 다음과 같이해야합니다.
var item0 = _config.GetSection("MyArray:0");
전체 배열의 값을 선택하려면 다음과 같이해야합니다.
IConfigurationSection myArraySection = _config.GetSection("MyArray");
var itemArray = myArraySection.AsEnumerable();
이상적으로 는 공식 문서에서 제안한 옵션 패턴 사용 을 고려해야 합니다. 이것은 당신에게 더 많은 혜택을 줄 것입니다.
답변
다음 두 가지 NuGet 패키지를 설치할 수 있습니다.
Microsoft.Extensions.Configuration
Microsoft.Extensions.Configuration.Binder
그런 다음 다음 확장 방법을 사용할 수 있습니다.
var myArray = _config.GetSection("MyArray").Get<string[]>();
답변
appsettings.json에 레벨을 추가하십시오.
{
"MySettings": {
"MyArray": [
"str1",
"str2",
"str3"
]
}
}
섹션을 나타내는 클래스를 만듭니다.
public class MySettings
{
public List<string> MyArray {get; set;}
}
응용 프로그램 시작 클래스에서 DI 서비스에 모델을 삽입하십시오.
services.Configure<MySettings>(options => Configuration.GetSection("MySettings").Bind(options));
그리고 컨트롤러의 DI 서비스에서 구성 데이터를 가져옵니다.
public class HomeController : Controller
{
private readonly List<string> _myArray;
public HomeController(IOptions<MySettings> mySettings)
{
_myArray = mySettings.Value.MyArray;
}
public IActionResult Index()
{
return Json(_myArray);
}
}
모든 데이터가 필요한 경우 컨트롤러의 속성에 전체 구성 모델을 저장할 수도 있습니다.
public class HomeController : Controller
{
private readonly MySettings _mySettings;
public HomeController(IOptions<MySettings> mySettings)
{
_mySettings = mySettings.Value;
}
public IActionResult Index()
{
return Json(_mySettings.MyArray);
}
}
ASP.NET Core의 의존성 주입 서비스는 매력처럼 작동합니다 🙂
답변
다음과 같이 복잡한 JSON 객체 배열이있는 경우 :
{
"MySettings": {
"MyValues": [
{ "Key": "Key1", "Value": "Value1" },
{ "Key": "Key2", "Value": "Value2" }
]
}
}
이 방법으로 설정을 검색 할 수 있습니다.
var valuesSection = configuration.GetSection("MySettings:MyValues");
foreach (IConfigurationSection section in valuesSection.GetChildren())
{
var key = section.GetValue<string>("Key");
var value = section.GetValue<string>("Value");
}
답변
이것은 구성에서 문자열 배열을 반환하는 데 효과적이었습니다.
var allowedMethods = Configuration.GetSection("AppSettings:CORS-Settings:Allow-Methods")
.Get<string[]>();
내 구성 섹션은 다음과 같습니다.
"AppSettings": {
"CORS-Settings": {
"Allow-Origins": [ "http://localhost:8000" ],
"Allow-Methods": [ "OPTIONS","GET","HEAD","POST","PUT","DELETE" ]
}
}
답변
구성에서 복잡한 JSON 객체 배열을 반환하는 경우 @djangojazz의 답변 을 튜플 대신 익명 유형과 동적을 사용 하도록 조정했습니다 .
설정 섹션은 다음과 같습니다.
"TestUsers": [
{
"UserName": "TestUser",
"Email": "Test@place.com",
"Password": "P@ssw0rd!"
},
{
"UserName": "TestUser2",
"Email": "Test2@place.com",
"Password": "P@ssw0rd!"
}],
이 방법으로 객체 배열을 반환 할 수 있습니다.
public dynamic GetTestUsers()
{
var testUsers = Configuration.GetSection("TestUsers")
.GetChildren()
.ToList()
.Select(x => new {
UserName = x.GetValue<string>("UserName"),
Email = x.GetValue<string>("Email"),
Password = x.GetValue<string>("Password")
});
return new { Data = testUsers };
}
답변
오래된 질문이지만 C # 7 표준으로 .NET Core 2.1에 대한 답변을 업데이트 할 수 있습니다. appsettings.Development.json에만 다음과 같은 목록이 있다고 가정 해보십시오.
"TestUsers": [
{
"UserName": "TestUser",
"Email": "Test@place.com",
"Password": "P@ssw0rd!"
},
{
"UserName": "TestUser2",
"Email": "Test2@place.com",
"Password": "P@ssw0rd!"
}
]
다음과 같이 Microsoft.Extensions.Configuration.IConfiguration이 구현되고 연결되는 모든 위치에서 추출 할 수 있습니다.
var testUsers = Configuration.GetSection("TestUsers")
.GetChildren()
.ToList()
//Named tuple returns, new in C# 7
.Select(x =>
(
x.GetValue<string>("UserName"),
x.GetValue<string>("Email"),
x.GetValue<string>("Password")
)
)
.ToList<(string UserName, string Email, string Password)>();
이제 형식이 잘 지정된 개체의 목록이 있습니다. testUsers.First ()로 이동하면 Visual Studio는 이제 ‘UserName’, ‘Email’및 ‘Password’에 대한 옵션을 표시해야합니다.