팁 (조언)
이 콘텐츠는 Blazor 또는 오프라인으로 읽을 수 있는 다운로드 가능한 무료 PDF로 제공되는 for ASP NET Web Forms Developers for Azure eBook에서 발췌한 것입니다.
Web Forms에서 앱 구성을 로드하는 기본 방법은 web.config 파일의 항목(서버 또는 web.config참조하는 관련 구성 파일)을 사용하는 것입니다. 정적 ConfigurationManager 개체를 사용하여 앱 설정, 데이터 리포지토리 연결 문자열 및 앱에 추가된 기타 확장 구성 공급자와 상호 작용할 수 있습니다. 다음 코드와 같이 앱 구성과의 상호 작용을 확인하는 것이 일반적입니다.
var configurationValue = ConfigurationManager.AppSettings["ConfigurationSettingName"];
var connectionString = ConfigurationManager.ConnectionStrings["MyDatabaseConnectionName"].ConnectionString;
ASP.NET Core 및 서버 쪽 Blazor에서는 앱이 Windows IIS 서버에서 호스트되는 경우 web.config 파일이 있을 수 있습니다. 그러나 이 구성과 상호 작용은 없으며 ConfigurationManager 다른 원본에서 보다 구조화된 앱 구성을 받을 수 있습니다. 구성을 수집하는 방법과 web.config 파일에서 구성 정보에 계속 액세스할 수 있는 방법을 살펴보겠습니다.
구성 소스
ASP.NET Core는 앱에 사용할 수 있는 많은 구성 원본이 있음을 인식합니다. 프레임워크는 기본적으로 이러한 기능을 최대한 활용하려고 합니다. 구성은 ASP.NET Core에서 이러한 다양한 원본에서 읽고 집계합니다. 동일한 구성 키에 대해 나중에 로드된 값이 이전 값보다 우선합니다.
ASP.NET Core는 클라우드를 인식하고 운영자와 개발자가 앱을 더 쉽게 구성할 수 있도록 설계되었습니다. ASP.NET Core는 환경을 인식하며 사용자 Production 또는 Development 환경에서 실행 중인지 알고 있습니다. 환경 표시기는 시스템 환경 변수에 ASPNETCORE_ENVIRONMENT 설정됩니다. 값이 구성되지 않은 경우 앱은 기본적으로 환경에서 실행됩니다 Production .
앱은 환경 이름에 따라 여러 원본에서 구성을 트리거하고 추가할 수 있습니다. 기본적으로 구성은 나열된 순서대로 다음 리소스에서 로드됩니다.
- appsettings.json 파일(있는 경우)
- appsettings. {ENVIRONMENT_NAME}.json 파일(있는 경우)
- 디스크의 사용자 비밀 파일(있는 경우)
- 환경 변수
- 명령줄 인수
appsettings.json 형식 및 액세스
appsettings.json 파일은 다음 JSON과 같이 구조화된 값을 사용하여 계층적일 수 있습니다.
{
"section0": {
"key0": "value",
"key1": "value"
},
"section1": {
"key0": "value",
"key1": "value"
}
}
이전 JSON과 함께 제공된 경우 구성 시스템은 자식 값을 평면화하고 정규화된 계층 경로를 참조합니다. 콜론(:) 문자는 계층 구조의 각 속성을 구분합니다. 예를 들어, 구성 키 section1:key0는 개체 리터럴 section1의 key0 값에 접근합니다.
사용자 비밀
사용자 비밀은 다음과 같습니다.
- 앱 개발 폴더 외부의 개발자 워크스테이션에 있는 JSON 파일에 저장된 구성 값입니다.
-
Development환경에서 실행될 때만 로드됩니다. - 특정 앱과 연결됩니다.
- .NET CLI의
user-secrets명령을 사용하여 관리합니다.
다음 명령을 실행하여 비밀 스토리지에 대한 앱을 구성합니다 user-secrets .
dotnet user-secrets init
앞의 명령은 프로젝트 파일에 요소를 추가합니다 UserSecretsId . 요소에는 비밀을 앱과 연결하는 데 사용되는 GUID가 포함되어 있습니다. 그런 다음 명령을 사용하여 비밀을 정의할 set 수 있습니다. 다음은 그 예입니다.
dotnet user-secrets set "Parent:ApiKey" "12345"
위의 명령은 개발자의 워크스테이션에서 Parent:ApiKey 구성 키를 12345 값으로 사용할 수 있도록 합니다.
사용자 비밀을 만들고, 저장하고, 관리하는 방법에 대한 자세한 내용은 ASP.NET Core 문서에서 개발 중인 앱 비밀의 안전한 스토리지를 참조하세요.
환경 변수
앱 구성에 로드된 다음 값 집합은 시스템의 환경 변수입니다. 이제 구성 API를 통해 시스템의 모든 환경 변수 설정에 액세스할 수 있습니다. 계층적 값은 앱 내에서 읽을 때 콜론 문자로 평면화되고 구분됩니다. 그러나 일부 운영 체제에서는 콜론 문자 환경 변수 이름을 허용하지 않습니다. ASP.NET Core는 이중 밑줄(__)이 있는 값을 액세스할 때 콜론으로 변환하여 이 제한을 해결합니다.
Parent:ApiKey 위의 사용자 비밀 섹션의 값을 환경 변수Parent__ApiKey로 재정의할 수 있습니다.
명령줄 인수
앱이 시작될 때 구성을 명령줄 인수로 제공할 수도 있습니다. 이중 대시(--) 또는 슬래시(/) 표기법을 사용하여 설정할 구성 값의 이름과 구성할 값을 나타냅니다. 구문은 다음 명령과 유사합니다.
dotnet run CommandLineKey1=value1 --CommandLineKey2=value2 /CommandLineKey3=value3
dotnet run --CommandLineKey1 value1 /CommandLineKey2 value2
dotnet run Parent:ApiKey=67890
web.config의 반환
IIS에서 Windows에 앱을 배포한 경우 web.config 파일은 여전히 앱을 관리하도록 IIS를 구성합니다. 기본적으로 IIS는 ANCM(ASP.NET Core 모듈)에 대한 참조를 추가합니다. ANCM은 Kestrel 웹 서버 대신 앱을 호스트하는 네이티브 IIS 모듈입니다. 이 web.config 섹션은 다음 XML 태그와 유사합니다.
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<location path="." inheritInChildApplications="false">
<system.webServer>
<handlers>
<add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" />
</handlers>
<aspNetCore processPath=".\MyApp.exe"
stdoutLogEnabled="false"
stdoutLogFile=".\logs\stdout"
hostingModel="inprocess" />
</system.webServer>
</location>
</configuration>
앱별 구성을 정의하려면 environmentVariables 요소를 aspNetCore 요소에 중첩할 수 있습니다. 이 섹션에 정의된 값은 ASP.NET Core 앱에 환경 변수로 표시됩니다. 환경 변수는 앱 시작의 해당 세그먼트 동안 적절하게 로드됩니다.
<aspNetCore processPath="dotnet"
arguments=".\MyApp.dll"
stdoutLogEnabled="false"
stdoutLogFile=".\logs\stdout"
hostingModel="inprocess">
<environmentVariables>
<environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Development" />
<environmentVariable name="Parent:ApiKey" value="67890" />
</environmentVariables>
</aspNetCore>
앱에서 구성 읽기
ASP.NET Core는 IConfiguration 인터페이스를 통해 앱 구성을 제공합니다.
Blazor 구성 요소, Blazor 페이지 및 구성에 액세스해야 하는 다른 ASP.NET Core 관리 클래스에서 이 구성 인터페이스를 요청해야 합니다. ASP.NET Core 프레임워크는 이 인터페이스를 이전에 구성된 확인된 구성으로 자동으로 채웁니다.
Blazor 페이지 또는 구성 요소의 Razor 태그에서는 IConfiguration 파일의 맨 위에서 @inject 개체를 지시문으로 삽입할 수 있습니다, 다음과 같이:
@inject IConfiguration Configuration
바로 앞의 이 진술은 IConfiguration 개체를 Configuration 변수로서 Razor 템플릿의 나머지 부분에서 사용할 수 있게 합니다.
개별 구성 설정은 인덱서 매개 변수로 찾은 구성 설정 계층 구조를 지정하여 읽을 수 있습니다.
var mySetting = Configuration["section1:key0"];
이전 예제에서 section1에 대한 구성을 검색하는 것과 유사한 구문을 사용하여 특정 위치에서 키 컬렉션을 검색하는 GetSection 방법을 사용하여 GetSection("section1") 전체 구성 섹션을 가져올 수 있습니다.
강력한 형식의 구성
Web Forms를 사용하면 ConfigurationSection 유형 및 관련 유형에서 상속된 강력한 형식의 구성 유형을 만들 수 있었습니다. 이러한 ConfigurationSection 구성 값에 대한 일부 비즈니스 규칙 및 처리를 구성할 수 있습니다.
ASP.NET Core에서 구성 값을 받을 클래스 계층 구조를 지정할 수 있습니다. 이들 클래스:
- 부모 클래스에서 상속할 필요가 없습니다.
- 캡처하려는 구성 구조에 대한 속성 및 형식 참조와 일치하는 속성을 포함해야 합니다
public.
이전 appsettings.json 샘플의 경우 다음 클래스를 정의하여 값을 캡처할 수 있습니다.
public class MyConfig
{
public MyConfigSection section0 { get; set;}
public MyConfigSection section1 { get; set;}
}
public class MyConfigSection
{
public string key0 { get; set; }
public string key1 { get; set; }
}
이 클래스 계층은 메서드에 다음 줄을 Startup.ConfigureServices 추가하여 채울 수 있습니다(또는 대신 속성을 사용하여 builder.Servicesservices 적절한 위치).
services.Configure<MyConfig>(Configuration);
앱의 다른 부분에서는, 클래스에 입력 매개 변수를 추가하거나 @inject 형식의 Razor 템플릿에 IOptions<MyConfig> 지시문을 추가하여 강력한 형식의 구성 설정을 수신할 수 있습니다.
IOptions<MyConfig>.Value 속성은 구성 설정에서 채워진 MyConfig 값을 생성합니다.
@inject IOptions<MyConfig> options
@code {
var MyConfiguration = options.Value;
var theSetting = MyConfiguration.section1.key0;
}
옵션 기능에 대한 자세한 내용은 ASP.NET Core 문서의 옵션 패턴에서 찾을 수 있습니다.
.NET