참고
이 문서의 최신 버전은 아닙니다. 현재 릴리스는 이 문서의 .NET 10 버전을 참조하세요.
경고
이 버전의 ASP.NET Core는 더 이상 지원되지 않습니다. 자세한 내용은 .NET 및 .NET Core 지원 정책을 참조 하세요. 현재 릴리스는 이 문서의 .NET 10 버전을 참조하세요.
ASP.NET Core 앱은 호스트를 구성 및 실행합니다. 호스트는 앱 시작 및 수명 관리를 담당합니다. 최소한으로 호스트는 서버 및 요청 처리 파이프라인을 구성합니다. 호스트는 로깅, 종속성 주입 및 구성을 설정할 수도 있습니다.
이 문서에서는 이전 버전과의 호환성을 위해서만 사용 가능한 상태를 유지하는 웹 호스트에 설명합니다. ASP.NET Core 템플릿은 웹앱에 권장되는 WebApplicationBuilder 및 WebApplication을 만듭니다. 자세한 WebApplicationBuilderWebApplication내용은 .NET 5의 ASP.NET Core에서 .NET 6으로 마이그레이션을 참조하세요.
호스트 설정
의 인스턴스를 사용하여 호스트를 만듭니다 IWebHostBuilder. 이 작업은 일반적으로 앱의 진입점인 MainProgram.cs 파일의 메서드에서 수행됩니다. 일반적인 앱은 메서드를 CreateDefaultBuilder 호출하여 호스트 설정을 시작합니다.
public class Program
{
public static void Main(string[] args)
{
CreateWebHostBuilder(args).Build().Run();
}
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>();
}
코드를 호출하는 CreateDefaultBuilder 메서드는 CreateWebHostBuilder라는 메서드에 있으며, 이는 작성기 객체의 Run 메서드를 호출하는 Main 코드와 분리되어 있습니다.
Entity Framework Core 도구를 사용하는 경우 분리가 필요합니다. 이 도구는 앱을 실행하지 않고 호스트를 구성하기 위해 디자인 타임에 호출할 수 있는 CreateWebHostBuilder 메서드를 찾으려 합니다. 대안은 .의 IDesignTimeDBContextfactory인스턴스를 만드는 것입니다. 자세한 내용은 디자인 시 DbContext 만들기를 참조하세요.
CreateDefaultBuilder 메서드는 다음 작업을 수행합니다:
Kestrel 앱의 호스팅 구성 공급자를 사용하여 서버를 웹 서버로 구성합니다. Kestrel 서버의 기본 옵션은 ASP.NET Core Kestrel 웹 서버의 옵션 구성을 참조하세요.
콘텐츠 루트를 GetCurrentDirectory에서 반환된 경로로 설정합니다.
다음 원본에서 호스트 구성 을 로드합니다.
- 접두사로 지정된
ASPNETCORE_환경 변수(예:ASPNETCORE_ENVIRONMENT) - 명령줄 인수
- 접두사로 지정된
앱 구성을 다음 순서대로 로드합니다.
- appsettings.json 파일
- Appsettings. {Environment}.json 파일
-
사용자 비밀 (앱이 엔트리 어셈블리를 사용하여
Development환경에서 실행될 때 로드됨) - 환경 변수
- 명령줄 인수
콘솔 및 디버그 출력에 대한 로깅을 구성합니다. 로깅에는 로그 필터링 규칙이 포함되어 있으며, 이는 appsettings.json 또는 appsettings.{Environment}.json 파일의 로깅 구성 섹션에 지정됩니다.
애플리케이션이 ASP.NET Core 모듈
CreateDefaultBuilder을 사용하여 IIS 뒤에서 실행되는 경우 애플리케이션 기본 주소 및 포트를 구성하는 IIS 통합을 사용하도록 설정합니다. 또한 IIS 통합은 시작 오류를 캡처하도록 앱을 구성합니다. IIS 기본 옵션은 IIS가 있는 Windows에서 ASP.NET Core 호스트를 참조하세요.애플리케이션 환경ValidateScopes이
true.인 경우 속성을Development로 설정합니다. 자세한 내용은 범위 유효성 검사 구성을 참조하세요.
콘텐츠 루트는 호스트가 MVC 뷰 파일과 같은 콘텐츠 파일을 검색하는 위치를 결정합니다. 앱이 프로젝트 루트 폴더에서 시작되면 해당 폴더가 콘텐츠 루트로 사용됩니다. 이 동작은 Visual Studio 및 dotnet 새 템플릿의 기본값입니다.
앱 구성에 대한 자세한 내용은 ASP.NET Core의 구성을 참조하세요.
참고
정적 CreateDefaultBuilder 메서드를 사용하는 대신 ASP.NET Core 2.x를 WebHostBuilder 사용하여 호스트를 만들 수 있습니다.
호스트를 설정할 때, Configure 및 ConfigureServices 메서드를 사용할 수 있습니다.
Startup 클래스가 지정된 경우 Configure 메서드를 정의해야 합니다. 자세한 내용은 ASP.NET Core에서 앱 시작을 참조하세요.
ConfigureServices 호출이 여러 번 실행되어 서로 추가됩니다. 인스턴스에 대한 ConfigureUseStartup 여러 호출은 WebHostBuilder 이전 설정을 대체합니다.
구성을 재정의하는 메서드
에 정의된 CreateDefaultBuilder구성을 재정의하고 보강할 수 있습니다.
ConfigureAppConfiguration 및 ConfigureLogging 메서드, IWebHostBuilder의 기타 메서드 및 확장 메서드를 사용합니다.
다음은 몇 가지 예입니다.
ConfigureAppConfiguration 는 앱에 대한 다른
IConfiguration속성을 지정하는 데 사용됩니다. 메서드에 대한ConfigureAppConfiguration다음 호출은 appsettings.xml 파일에 앱 구성을 포함하도록 대리자를 추가합니다.ConfigureAppConfiguration를 여러 번 호출할 수 있습니다. 이 구성은 호스트(예: 서버 URL 또는 환경)에 적용되지 않습니다. 자세한 내용은 호스트 구성 값 섹션을 참조하세요.WebHost.CreateDefaultBuilder(args) .ConfigureAppConfiguration((hostingContext, config) => { config.AddXmlFile("appsettings.xml", optional: true, reloadOnChange: true); }) ...다음
ConfigureLogging호출은 최소 로깅 수준(SetMinimumLevel)을 LogLevel으로 구성하는 대리자를 추가합니다. 이 설정은CreateDefaultBuilder메서드에서 구성한 appsettings.Development.json 파일(LogLevel.Debug) 및 appsettings.Production.json 파일(LogLevel.Error)의 설정을 재정의합니다.ConfigureLogging를 여러 번 호출할 수 있습니다.WebHost.CreateDefaultBuilder(args) .ConfigureLogging(logging => { logging.SetMinimumLevel(LogLevel.Warning); }) ...다음 호출은
ConfigureKestrel를CreateDefaultBuilder메서드로 구성할 때 Limits.MaxRequestBodySize의 기본값인 30,000,000바이트를 재정의합니다.WebHost.CreateDefaultBuilder(args) .ConfigureKestrel((context, options) => { options.Limits.MaxRequestBodySize = 20000000; });
웹 호스트 구성 값 설정
인스턴스는 WebHostBuilder 다음 방법을 사용하여 호스트 구성 값을 설정합니다.
형식
ASPNETCORE_{configurationKey}을 사용하는 환경 변수를 포함하는 호스트 작성기 구성입니다. 예들 들어ASPNETCORE_ENVIRONMENT입니다.확장(예: UseContentRoot 및 UseConfiguration. 자세한 내용은 웹 호스트 구성 재정의를 참조하세요.
UseSetting 메서드 및 연결된 키입니다. 값을
UseSetting설정하면 형식에 관계없이 값이 문자열로 설정됩니다.
호스트는 마지막에 값을 설정한 옵션을 사용합니다. 자세한 내용은 웹 호스트 구성 재정의를 참조하세요.
애플리케이션 이름
애플리케이션의 진입점을 포함하는 어셈블리의 이름을 정의합니다.
키: applicationName
형식: string
기본값: 앱 진입점이 있는 어셈블리의 이름입니다.
설정 방법: UseSetting
환경 변수: ASPNETCORE_APPLICATIONNAME
호스트 생성 중에 UseStartup 메서드나 Configure 메서드가 호출되면 IWebHostEnvironment.ApplicationName 속성이 자동으로 설정됩니다. 값을 명시적으로 설정하려면 필드를 사용합니다 ApplicationKey .
WebHost.CreateDefaultBuilder(args)
.UseSetting(WebHostDefaults.ApplicationKey, "CustomApplicationName")
시작 오류 캡처
시작 오류 캡처를 제어합니다.
키: captureStartupErrors
형식: bool(true 또는 1)
기본: false. 앱이 Kestrel을(를) 사용하여 IIS 뒤에서 실행되는 경우 기본값은 true입니다.
설정 방법: CaptureStartupErrors
환경 변수: ASPNETCORE_CAPTURESTARTUPERRORS
로 false설정하면 시작 중 오류가 발생하여 호스트가 종료됩니다. 이 옵션을 true설정하면 호스트는 시작 중에 예외를 캡처하고 서버를 시작하려고 시도합니다.
WebHost.CreateDefaultBuilder(args)
.CaptureStartupErrors(true)
콘텐츠 루트
ASP.NET Core에서 콘텐츠 파일 검색을 시작하는 위치를 결정합니다.
키: contentRoot
형식: string
기본값: 앱 어셈블리가 포함된 폴더입니다.
설정 방법: UseContentRoot
환경 변수: ASPNETCORE_CONTENTROOT
콘텐츠 루트는 또한 웹 루트에 대한 기본 경로로 사용됩니다. 콘텐츠 루트 경로가 존재하지 않는 경우 호스트가 시작되지 않습니다.
WebHost.CreateDefaultBuilder(args)
.UseContentRoot("c:\\<content-root>")
자세한 내용은 다음을 참조하세요.
자세한 오류
자세한 오류를 캡처할지 여부를 결정합니다.
키: detailedErrors
형식: bool(true 또는 1)
기본값:false
설정 방법: UseSetting
환경 변수: ASPNETCORE_DETAILEDERRORS
사용하도록 설정되거나 환경 값이 Development으로 설정된 경우, 앱은 자세한 예외를 캡처합니다.
WebHost.CreateDefaultBuilder(args)
.UseSetting(WebHostDefaults.DetailedErrorsKey, "true")
환경
애플리케이션 환경을 설정합니다.
키: environment
형식: string
기본값:Production
설정 방법: UseEnvironment
환경 변수: ASPNETCORE_ENVIRONMENT
환경은 어떠한 값으로도 설정할 수 있습니다. 프레임워크에서 정의된 값은 Development, Staging 및 Production을 포함합니다. 값은 대/소문자를 구분하지 않습니다.
기본적으로 환경은 ASPNETCORE_ENVIRONMENT 환경 변수에서 읽습니다.
Visual Studio를 사용하는 경우 launchSettings.json 파일에서 환경 변수를 설정할 수 있습니다. 자세한 내용은 ASP.NET Core 런타임 환경을 참조하세요.
WebHost.CreateDefaultBuilder(args)
.UseEnvironment(EnvironmentName.Development)
스타트업 모임 주최하기
시작 시 로드할 호스팅 시작 어셈블리의 세미콜론으로 구분된 문자열을 제공합니다.
키: hostingStartupAssemblies
형식: string
기본값: 빈 문자열입니다.
설정 방법: UseSetting
환경 변수: ASPNETCORE_HOSTINGSTARTUPASSEMBLIES
구성 값의 기본값이 빈 문자열이지만, 호스팅 시작 어셈블리는 항상 앱의 어셈블리를 포함합니다. 호스팅 시작 어셈블리가 제공되는 경우, 시작 시 앱이 일반적인 서비스를 빌드할 때 로드를 위해 앱의 어셈블리에 추가됩니다.
WebHost.CreateDefaultBuilder(args)
.UseSetting(WebHostDefaults.HostingStartupAssembliesKey, "assembly1;assembly2")
HTTPS 포트
비 HTTPS 연결을 가져오는 경우 리디렉션에 대한 HTTPS 포트를 설정합니다.
키: https_port
형식: string
기본값: 기본값이 없습니다.
설정 방법: UseSetting
환경 변수: ASPNETCORE_HTTPS_PORT
이 설정은 HTTPS를 적용하는 데 사용됩니다. 이 설정으로 인해 서버가 지정된 포트에서 수신 대기하지 않습니다. 즉, 요청을 사용하지 않는 포트로 실수로 리디렉션할 수 있습니다.
WebHost.CreateDefaultBuilder(args)
.UseSetting("https_port", "8080")
호스팅 시작 시 어셈블리 제외
시작 시 제외할 호스팅 시작 어셈블리의 세미콜론으로 구분된 문자열을 제공합니다.
키: hostingStartupExcludeAssemblies
형식: string
기본값: 빈 문자열입니다.
설정 방법: UseSetting
환경 변수: ASPNETCORE_HOSTINGSTARTUPEXCLUDEASSEMBLIES
WebHost.CreateDefaultBuilder(args)
.UseSetting(WebHostDefaults.HostingStartupExcludeAssembliesKey, "assembly1;assembly2")
URL 호스팅을 선호합니다
호스트가 IServer 구현으로 구성된 URL 대신 WebHostBuilder로 구성된 URL에서 수신 대기해야 하는지를 나타냅니다.
키: preferHostingUrls
형식: bool(true 또는 1)
기본값:false
설정 방법: PreferHostingUrls
환경 변수: ASPNETCORE_PREFERHOSTINGURLS
WebHost.CreateDefaultBuilder(args)
.PreferHostingUrls(true)
호스팅 시작 방지
앱의 어셈블리에 의해 구성된 호스팅 시작 어셈블리를 포함한 호스팅 시작 어셈블리의 자동 로딩을 방지합니다. 자세한 내용은 ASP.NET Core에서 호스팅 시작 어셈블리 사용을 참조하세요.
키: preventHostingStartup
형식: bool(true 또는 1)
기본값:false
설정 방법: UseSetting
환경 변수: ASPNETCORE_PREVENTHOSTINGSTARTUP
WebHost.CreateDefaultBuilder(args)
.UseSetting(WebHostDefaults.PreventHostingStartupKey, "true")
서버 URL들
서버에서 요청을 수신해야 하는 포트와 프로토콜이 있는 IP 주소 또는 호스트 주소를 나타냅니다.
키: urls
형식: string
기본값:http://localhost:5000
설정 방법: UseUrls
환경 변수: ASPNETCORE_URLS
서버가 응답해야 하는 URL 접두사에 대한 세미콜론으로 구분 ; 된 목록으로 설정합니다. 예들 들어 http://localhost:123입니다. 와일드카드 별표를 * 사용하여 서버가 지정된 포트 및 프로토콜(예 http://*:5000: )을 사용하여 IP 주소 또는 호스트 이름에 대한 요청을 수신 대기해야 함을 나타냅니다. 프로토콜(http:// 또는 https://)은 각 URL에 포함되어 있어야 합니다. 지원되는 형식은 서버마다 다릅니다.
WebHost.CreateDefaultBuilder(args)
.UseUrls("http://*:5000;http://localhost:5001;https://hostname:5002")
Kestrel에는 자체 엔드포인트 구성 API가 있습니다. 자세한 내용은 ASP.NET Core Kestrel 웹 서버에 대한 엔드포인트 구성을 참조하세요.
종료 시간 제한
웹 호스트가 종료되기를 기다리는 시간을 지정합니다.
키: shutdownTimeoutSeconds
형식: int
기본값: 5초
설정 방법: UseShutdownTimeout
환경 변수: ASPNETCORE_SHUTDOWNTIMEOUTSECONDS
키는 int (예: .UseSetting(WebHostDefaults.ShutdownTimeoutKey, "10")UseShutdownTimeout)를 허용하지만, 확장 메서드는 TimeSpan 형식의 매개 변수를 받습니다.
타임아웃 시간 동안 웹 호스트는 다음을 수행합니다:
- ApplicationStopping을 트리거합니다.
- 중지하지 못한 서비스에 대한 모든 오류를 기록하면서 호스팅된 서비스 중지를 시도합니다.
모든 호스팅 서비스가 중지되기 전에 제한 시간이 만료되면 앱이 종료되면 나머지 활성 서비스가 중지됩니다. 서비스는 여전히 처리 중이더라도 중지됩니다. 서비스를 중지하는 데 시간이 더 필요한 경우 제한 시간을 늘립니다.
WebHost.CreateDefaultBuilder(args)
.UseShutdownTimeout(TimeSpan.FromSeconds(10))
시작 어셈블리
클래스를 검색할 어셈블리를 지정합니다 Startup .
키: startupAssembly
형식: string
기본값: 애플리케이션 어셈블리입니다.
설정 방법: UseStartup
환경 변수: ASPNETCORE_STARTUPASSEMBLY
이름() 또는 형식(string)으로 어셈블리를TStartup 참조할 수 있습니다. 여러 UseStartup 메서드가 호출되면 마지막 호출이 우선합니다.
WebHost.CreateDefaultBuilder(args)
.UseStartup("StartupAssemblyName")
WebHost.CreateDefaultBuilder(args)
.UseStartup<TStartup>()
웹 루트
앱의 정적 자산에 대한 상대 경로를 설정합니다.
키: webroot
형식: string
기본값:wwwroot
설정 방법: UseWebRoot
환경 변수: ASPNETCORE_WEBROOT
{content root}/wwwroot 경로가 있어야 합니다. 경로가 존재하지 않으면 no-op 파일 공급자가 사용됩니다.
WebHost.CreateDefaultBuilder(args)
.UseWebRoot("public")
자세한 내용은 다음을 참조하세요.
웹 호스트 구성 재정의
ASP.NET Core에서 애플리케이션 구성을 사용하여 웹 호스트를 구성합니다.
다음 예제에서 호스트 구성은 선택적으로hostsettings.json 파일에 지정됩니다. 명령줄 인수는 hostsettings.json 파일에서 로드된 모든 구성을 재정의할 수 있습니다. 빌드된 구성(구성)은 UseConfiguration 메서드를 사용하여 호스트를 구성하는 데 사용됩니다.
IWebHostBuilder 구성이 애플리케이션 구성에 추가되지만 반대는 true가 아닙니다. 이 ConfigureAppConfiguration 메서드는 IWebHostBuilder 구성에 영향을 주지 않습니다.
UseUrls로 제공된 구성을 hostsettings.json 구성 및 명령줄 인수 구성으로 재정의합니다.
public class Program
{
public static void Main(string[] args)
{
CreateWebHostBuilder(args).Build().Run();
}
public static IWebHostBuilder CreateWebHostBuilder(string[] args)
{
var config = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("hostsettings.json", optional: true)
.AddCommandLine(args)
.Build();
return WebHost.CreateDefaultBuilder(args)
.UseUrls("http://*:5000")
.UseConfiguration(config)
.Configure(app =>
{
app.Run(context =>
context.Response.WriteAsync("Hello, World!"));
});
}
}
hostsettings.json 파일 내용:
{
urls: "http://*:5005"
}
참고
이 메서드는 UseConfiguration 제공된 IConfiguration 키에서 호스트 작성기 구성으로만 키를 복사합니다. 따라서 JSON, INI 및 XML 설정 파일에 대한 속성을 설정 reloadOnChange: true 해도 효과가 없습니다.
특정 URL에서 실행하는 호스트를 지정하려면 dotnet run 실행 시 원하는 값을 명령 프롬프트에서 전달할 수 있습니다. 명령줄 인수는 hostsettings.json 파일의 값을 재정의하며 서버는 포트 8080에서 접속을 기다립니다.
dotnet run --urls "http://*:8080"
웹 호스트 관리
웹 호스트를 관리하려면 다음 방법을 사용합니다.
실행
Run 메서드는 웹앱을 시작하고 호스트가 종료될 때까지 호출 스레드를 차단합니다.
host.Run();
Start
Start 메서드를 호출하여 비차단 방식으로 호스트를 실행합니다.
using (host)
{
host.Start();
Console.ReadLine();
}
URL 목록이 Start 메서드에 전달되면 지정된 URL에서 수신합니다.
var urls = new List<string>()
{
"http://*:5000",
"http://localhost:5001"
};
var host = new WebHostBuilder()
.UseKestrel()
.UseStartup<Startup>()
.Start(urls.ToArray());
using (host)
{
Console.ReadLine();
}
앱은 정적 편의 메서드를 사용하여 메서드의 CreateDefaultBuilder 미리 구성된 기본값으로 새 호스트를 초기화하고 시작할 수 있습니다. 이러한 메서드는 콘솔 출력 없이 서버를 시작하고 중단(WaitForShutdownC/SIGINT(Windows)/SIGINT(Windows), ++(macOS) 또는 SIGTERM)를 기다리는 메서드를 사용합니다.
Start(RequestDelegate 앱)
RequestDelegate을(를) 사용하여 호스트를 실행합니다.
using (var host = WebHost.Start(app => app.Response.WriteAsync("Hello, World!")))
{
Console.WriteLine("Use Ctrl-C to shutdown the host...");
host.WaitForShutdown();
}
브라우저에서 http://localhost:5000 URL로 "Hello World!"라는 응답을 받기 위해 요청을 전송합니다. 이 메서드는 WaitForShutdown가 중단(Ctrl-C/SIGINT 또는 SIGTERM)될 때까지 실행을 정지합니다. 앱은 Console.WriteLine 메시지를 표시하고 종료하기 위한 키 입력을 대기합니다.
Start(string url, RequestDelegate app)
URL 및 RequestDelegate와 함께 호스트를 실행합니다.
using (var host = WebHost.Start("http://localhost:8080", app => app.Response.WriteAsync("Hello, World!")))
{
Console.WriteLine("Use Ctrl-C to shutdown the host...");
host.WaitForShutdown();
}
Start(RequestDelegate 앱)과 동일한 결과를 생성하지만, 앱은 http://localhost:8080 URL에서 응답합니다.
Start(Action<IRouteBuilder> routeBuilder)
라우팅 미들웨어를 사용하는 (IRouteBuilder) 인스턴스 부터 시작하여 호스트를 실행합니다.
using (var host = WebHost.Start(router => router
.MapGet("hello/{name}", (req, res, data) =>
res.WriteAsync($"Hello, {data.Values["name"]}!"))
.MapGet("buenosdias/{name}", (req, res, data) =>
res.WriteAsync($"Buenos dias, {data.Values["name"]}!"))
.MapGet("throw/{message?}", (req, res, data) =>
throw new Exception((string)data.Values["message"] ?? "Uh oh!"))
.MapGet("{greeting}/{name}", (req, res, data) =>
res.WriteAsync($"{data.Values["greeting"]}, {data.Values["name"]}!"))
.MapGet("", (req, res, data) => res.WriteAsync("Hello, World!"))))
{
Console.WriteLine("Use Ctrl-C to shutdown the host...");
host.WaitForShutdown();
}
예제에서는 다음 브라우저 요청을 사용합니다.
| 요청 | 응답 |
|---|---|
http://localhost:5000/hello/Martin |
안녕하세요, 마틴! |
http://localhost:5000/buenosdias/Catrina |
부에노스 디아스, 카트리나! |
http://localhost:5000/throw/ooops! |
"oops!" 문자열로 예외를 throw합니다. |
http://localhost:5000/throw |
“Uh oh!” 문자열을 사용하여 예외를 throw합니다. |
http://localhost:5000/Sante/Kevin |
산테, 케빈! |
http://localhost:5000 |
전 세계 여러분 안녕하세요! |
이 메서드는 WaitForShutdown 중단(Ctrl-C/SIGINT 또는 SIGTERM)이 실행될 때까지 차단합니다. 앱은 Console.WriteLine 메시지를 표시하고 종료하기 위한 키 입력을 대기합니다.
Start(string url, Action<IRouteBuilder> 경로 빌더를 시작합니다)
URL 및 IRouteBuilder의 인스턴스로 시작하여 호스트를 실행합니다.
using (var host = WebHost.Start("http://localhost:8080", router => router
.MapGet("hello/{name}", (req, res, data) =>
res.WriteAsync($"Hello, {data.Values["name"]}!"))
.MapGet("buenosdias/{name}", (req, res, data) =>
res.WriteAsync($"Buenos dias, {data.Values["name"]}!"))
.MapGet("throw/{message?}", (req, res, data) =>
throw new Exception((string)data.Values["message"] ?? "Uh oh!"))
.MapGet("{greeting}/{name}", (req, res, data) =>
res.WriteAsync($"{data.Values["greeting"]}, {data.Values["name"]}!"))
.MapGet("", (req, res, data) => res.WriteAsync("Hello, World!"))))
{
Console.WriteLine("Use Ctrl-C to shut down the host...");
host.WaitForShutdown();
}
앱이 URL에 응답하는 것을 제외하고 Start(Action<IRouteBuilder> routeBuilder)와 동일한 결과를 생성합니다 http://localhost:8080 .
StartWith(Action<IApplicationBuilder> 앱)
다음을 구성하는 대리자부터 시작하여 호스트를 IApplicationBuilder실행합니다.
using (var host = WebHost.StartWith(app =>
app.Use(next =>
{
return async context =>
{
await context.Response.WriteAsync("Hello World!");
};
})))
{
Console.WriteLine("Use Ctrl-C to shut down the host...");
host.WaitForShutdown();
}
브라우저에서 http://localhost:5000 URL로 요청을 보내 "Hello World!" 응답을 받습니다. 이 메서드는 Ctrl-C/SIGINT 또는 SIGTERM을 통한 중단 명령이 내려질 때까지 실행을 차단합니다. 앱은 Console.WriteLine 메시지를 표시하고 종료하기 위한 키 입력을 대기합니다.
StartWith(문자열 URL, Action<IApplicationBuilder> 앱)
호스트를 실행하려면 URL과 구성할 대리자부터 시작하세요IApplicationBuilder.
using (var host = WebHost.StartWith("http://localhost:8080", app =>
app.Use(next =>
{
return async context =>
{
await context.Response.WriteAsync("Hello World!");
};
})))
{
Console.WriteLine("Use Ctrl-C to shut down the host...");
host.WaitForShutdown();
}
앱이 URL에 응답하는 것을 제외하고 StartWith(Action<IApplicationBuilder> 앱)와 동일한 결과를 생성합니다 http://localhost:8080 .
IWebHostEnvironment 인터페이스 사용
IWebHostEnvironment 인터페이스는 앱의 웹 호스팅 환경에 대한 정보를 제공합니다.
생성자 주입을 사용하여 인스턴스를 IWebHostEnvironment 가져온 다음 해당 속성 및 확장 메서드에 액세스합니다.
public class CustomFileReader
{
private readonly IWebHostEnvironment _env;
public CustomFileReader(IWebHostEnvironment env)
{
_env = env;
}
public string ReadFile(string filePath)
{
var fileProvider = _env.WebRootFileProvider;
// Process the file here
}
}
규칙 기반 접근 방식은 시작할 때 환경에 따라 앱을 구성하는 데 사용할 수 있습니다.
Startup 생성자에 IWebHostEnvironment 인스턴스를 삽입하여 ConfigureServices 메서드에서 사용합니다.
public class Startup
{
public Startup(IWebHostEnvironment env)
{
HostingEnvironment = env;
}
public IWebHostEnvironment HostingEnvironment { get; }
public void ConfigureServices(IServiceCollection services)
{
if (HostingEnvironment.IsDevelopment())
{
// Development configuration
}
else
{
// Staging/Production configuration
}
var contentRootPath = HostingEnvironment.ContentRootPath;
}
}
참고
확장 메서드 IsDevelopment 외에도 IWebHostEnvironment , IsStaging및 IsProduction 메서드를 IsEnvironment(string environmentName)제공합니다. 자세한 내용은 ASP.NET Core 런타임 환경을 참조하세요.
또한 IWebHostEnvironment 서비스를 파이프라인 처리를 설정하기 위한 Configure 메서드에 직접 주입할 수 있습니다.
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
// In Development, use the Developer Exception Page
app.UseDeveloperExceptionPage();
}
else
{
// In Staging/Production, route exceptions to /error
app.UseExceptionHandler("/error");
}
var contentRootPath = env.ContentRootPath;
}
사용자 지정 미들웨어를 만들 때 IWebHostEnvironment를 Invoke 메서드에 주입할 수 있습니다.
public async Task Invoke(HttpContext context, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
// Configure middleware for Development
}
else
{
// Configure middleware for Staging/Production
}
var contentRootPath = env.ContentRootPath;
}
IHostApplicationLifetime 인터페이스 사용
IHostApplicationLifetime은 시작 후 및 종료 작업을 허용합니다. 인터페이스에서 세 가지 속성은 취소 토큰으로, 시작 및 종료 이벤트를 정의하는 Action 메서드를 등록하는 데 사용됩니다.
| 취소 토큰 | Trigger |
|---|---|
ApplicationStarted |
호스트가 완전히 시작되었습니다. |
ApplicationStopped |
호스트가 정상적으로 종료를 완료하고 있습니다. 모든 요청이 처리될 것으로 예상됩니다. 종료 프로세스는 이 이벤트가 완료될 때까지 차단됩니다. |
ApplicationStopping |
호스트가 정상적으로 종료를 수행하고 있습니다. 요청이 여전히 처리 중일 수 있습니다. 이 이벤트가 완료될 때까지 종료는 차단됩니다. |
public class Startup
{
public void Configure(IApplicationBuilder app, IHostApplicationLifetime appLifetime)
{
appLifetime.ApplicationStarted.Register(OnStarted);
appLifetime.ApplicationStopping.Register(OnStopping);
appLifetime.ApplicationStopped.Register(OnStopped);
Console.CancelKeyPress += (sender, eventArgs) =>
{
appLifetime.StopApplication();
// Don't terminate the process immediately, wait for the Main thread to exit gracefully.
eventArgs.Cancel = true;
};
}
private void OnStarted()
{
// Perform post-startup activities here
}
private void OnStopping()
{
// Perform on-stopping activities here
}
private void OnStopped()
{
// Perform post-stopped activities here
}
}
메서드는 StopApplication 앱의 종료를 요청합니다. 다음 클래스에서는 StopApplication을 사용하여 해당 클래스의 Shutdown 메서드를 호출하는 경우 앱을 정상 종료합니다.
public class MyClass
{
private readonly IHostApplicationLifetime _appLifetime;
public MyClass(IHostApplicationLifetime appLifetime)
{
_appLifetime = appLifetime;
}
public void Shutdown()
{
_appLifetime.StopApplication();
}
}
범위 유효성 검사 구성
메서드는 앱의 환경이 Development인 경우 ValidateScopes 속성을 true로 설정합니다 CreateDefaultBuilder.
ValidateScopes가 true로 설정된 경우, 기본 서비스 공급자가 검사를 수행하여 다음을 확인합니다.
- 범위가 지정된 서비스는 직접 또는 간접적으로 루트 서비스 공급자에서 해결되지 않습니다.
- 범위가 지정된 서비스는 직접 또는 간접적으로 싱글톤에 삽입되지 않습니다.
루트 서비스 공급자는 메서드를 호출할 BuildServiceProvider 때 만들어집니다. 루트 서비스 공급자의 수명은 공급자가 앱과 함께 시작되고 앱이 종료될 때 삭제되는 앱/서버의 수명에 해당합니다.
범위가 지정된 서비스를 만든 컨테이너도 서비스를 삭제합니다. 범위가 지정된 서비스가 루트 컨테이너에 만들어지면 서비스의 수명이 효과적으로 싱글톤으로 승격됩니다. 루트 컨테이너는 앱/서버가 종료된 경우에만 서비스를 삭제합니다. 서비스 범위의 유효성 검사는 BuildServiceProvider가 호출될 경우 이러한 상황을 감지합니다.
범위를 항상 유효성 검사하려면 Production 환경을 포함하여, 호스트 작성기에서 ServiceProviderOptions으로 UseDefaultServiceProvider 메서드를 사용하여 개체를 구성합니다.
WebHost.CreateDefaultBuilder(args)
.UseDefaultServiceProvider((context, options) => {
options.ValidateScopes = true;
})
관련 콘텐츠
ASP.NET Core