ASP.NET Core에서 호스팅Hosting in ASP.NET Core

으로 Luke LathamBy Luke Latham

ASP.NET Core 응용 프로그램 구성 및 실행 한 호스트, 응용 프로그램 시작 및 수명 관리 담당 하는 합니다.ASP.NET Core apps configure and launch a host, which is responsible for app startup and lifetime management. 여기에 최소한 호스트 서버 및 요청 처리 파이프라인을 구성합니다.At a minimum, the host configures a server and a request processing pipeline.

호스트 설정Setting up a host

인스턴스를 사용 하 여 호스트 만들기 WebHostBuilder합니다.Create a host using an instance of WebHostBuilder. 이 일반적으로 응용 프로그램의 진입점에서 수행 되어는 Main 메서드.This is typically performed in your app's entry point, the Main method. 프로젝트 템플릿에서 Main 에 위치한 Program.cs합니다.In the project templates, Main is located in Program.cs. 일반적인 Program.cs 호출 CreateDefaultBuilder 설정은 호스트를 시작 하려면:A typical Program.cs calls CreateDefaultBuilder to start setting up a host:

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

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

CreateDefaultBuilder다음 작업을 수행합니다.CreateDefaultBuilder performs the following tasks:

콘텐츠 루트 호스트 MVC 뷰 파일과 같은 콘텐츠 파일을 검색 하는 위치를 결정 합니다.The content root determines where the host searches for content files, such as MVC view files. 기본 콘텐츠 루트는 Directory.GetCurrentDirectory합니다.The default content root is Directory.GetCurrentDirectory. 이 인해 응용 프로그램 루트 폴더에서 시작 될 때 웹 프로젝트의 루트 폴더 콘텐츠 루트로 사용 하 여 (예를 들어 호출 실행 dotnet 프로젝트 폴더에서).This results in using the web project's root folder as the content root when the app is started from the root folder (for example, calling dotnet run from the project folder). 사용 되는 기본 이것이 Visual Studiodotnet 새 템플릿을합니다.This is the default used in Visual Studio and the dotnet new templates.

참조 ASP.NET Core에서 구성을 응용 프로그램 구성에 대 한 자세한 내용은 합니다.See Configuration in ASP.NET Core for more information on app configuration.

참고

정적을 사용 하는 대신 CreateDefaultBuilder 에서 호스트를 만드는 메서드를 WebHostBuilder 은 지원 되는 ASP.NET Core 방법을 2.x 합니다.As an alternative to using the static CreateDefaultBuilder method, creating a host from WebHostBuilder is a supported approach with ASP.NET Core 2.x. 자세한 내용은 ASP.NET Core 1.x 탭을 참조 하십시오.See the ASP.NET Core 1.x tab for more information.

제공할 수는 호스트를 설정할 때 구성ConfigureServices 메서드.When setting up a host, you can provide Configure and ConfigureServices methods. 지정 하는 경우는 Startup 정의 해야 클래스는 Configure 메서드.If you specify a Startup class, it must define a Configure method. 자세한 내용은 참조 에서 ASP.NET Core 응용 프로그램 시작합니다.For more information, see Application Startup in ASP.NET Core. 여러 번 호출 ConfigureServices 서로에 추가 합니다.Multiple calls to ConfigureServices append to one another. 여러 번 호출 Configure 또는 UseStartupWebHostBuilder 이전 설정을 대체 합니다.Multiple calls to Configure or UseStartup on the WebHostBuilder replace previous settings.

호스트 구성 값Host configuration values

WebHostBuilder 와 직접 설정 될 수 있는 호스트에 대 한 대부분의 사용 가능한 구성 값을 설정 하기 위한 메서드를 제공 UseSetting 와 연결 된 키입니다.WebHostBuilder provides methods for setting most of the available configuration values for the host, which can also be set directly with UseSetting and the associated key. 사용 하 여 값을 설정할 때 UseSetting, 유형에 관계 없이 (따옴표로 묶음)을 문자열로 설정 됩니다.When setting a value with UseSetting, the value is set as a string (in quotes) regardless of the type.

시작 오류 캡처Capture Startup Errors

이 설정은 시작 오류의 캡처를 제어합니다.This setting controls the capture of startup errors.

: captureStartupErrorsKey: captureStartupErrors
형식: bool (true 또는 1)Type: bool (true or 1)
기본: 기본값으로 false Kestrel 며 기본값은 IIS 뒤에 있는 앱이 실행 하지 않는 한 true합니다.Default: Defaults to false unless the app runs with Kestrel behind IIS, where the default is true.
사용 하 여 설정:CaptureStartupErrorsSet using: CaptureStartupErrors

false, 종료 하는 호스트에서 시작 결과 동안 오류가 발생 합니다.When false, errors during startup result in the host exiting. true, 호스트 시작 하는 동안 예외를 캡처하고 서버를 시작 하려고 합니다.When true, the host captures exceptions during startup and attempts to start the server.

WebHost.CreateDefaultBuilder(args)
    .CaptureStartupErrors(true)
    ...

콘텐츠 루트Content Root

이 설정은 결정 ASP.NET Core MVC 뷰 등의 콘텐츠 파일을 검색 하기 시작 합니다.This setting determines where ASP.NET Core begins searching for content files, such as MVC views.

: contentRootKey: contentRoot
형식: 문자열Type: string
기본: 응용 프로그램 어셈블리 파일이 있는 폴더를 기본값으로 합니다.Default: Defaults to the folder where the app assembly resides.
사용 하 여 설정:UseContentRootSet using: UseContentRoot

에 대 한 기본 경로로 콘텐츠 루트는 또한는 웹 루트 설정을합니다.The content root is also used as the base path for the Web Root setting. 경로가 존재 하지 않는 경우 호스트가 시작 되지 않습니다.If the path doesn't exist, the host fails to start.

WebHost.CreateDefaultBuilder(args)
    .UseContentRoot("c:\\mywebsite")
    ...

자세한 오류Detailed Errors

오류를 캡처해야 하나요 자세히 설명 하는 경우 결정 합니다.Determines if detailed errors should be captured.

: detailedErrorsKey: detailedErrors
형식: bool (true 또는 1)Type: bool (true or 1)
기본: falseDefault: false
사용 하 여 설정:UseSettingSet using: UseSetting

사용 하는 경우 (또는 경우는 환경 로 설정 되어 Development), 응용 프로그램 자세한 예외를 캡처합니다.When enabled (or when the Environment is set to Development), the app captures detailed exceptions.

WebHost.CreateDefaultBuilder(args)
    .UseSetting(WebHostDefaults.DetailedErrorsKey, "true")
    ...

환경Environment

앱의 환경을 설정합니다.Sets the app's environment.

: 환경Key: environment
형식: 문자열Type: string
기본: 프로덕션Default: Production
사용 하 여 설정:UseEnvironmentSet using: UseEnvironment

설정할 수 있습니다는 환경 값으로.You can set the Environment to any value. 프레임 워크에서 정의 된 값 포함 Development, Staging, 및 Production합니다.Framework-defined values include Development, Staging, and Production. 값에 대/소문자 구분 되지 않습니다.Values aren't case sensitive. 기본적으로는 환경 에서 읽기는 ASPNETCORE_ENVIRONMENT 환경 변수입니다.By default, the Environment is read from the ASPNETCORE_ENVIRONMENT environment variable. 사용 하는 경우 Visual Studio, 환경 변수를 설정할 수 있습니다는 launchSettings.json 파일입니다.When using Visual Studio, environment variables may be set in the launchSettings.json file. 자세한 내용은 여러 환경 사용을 참조하세요.For more information, see Working with Multiple Environments.

WebHost.CreateDefaultBuilder(args)
    .UseEnvironment("Development")
    ...

호스팅 시작 어셈블리Hosting Startup Assemblies

응용 프로그램의 호스팅 시작 어셈블리를 설정합니다.Sets the app's hosting startup assemblies.

: hostingStartupAssembliesKey: hostingStartupAssemblies
형식: 문자열Type: string
기본: 빈 문자열Default: Empty string
사용 하 여 설정:UseSettingSet using: UseSetting

호스팅 시작 로드할 어셈블리를 시작할 때의 세미콜론으로 구분 된 문자열입니다.A semicolon-delimited string of hosting startup assemblies to load on startup. 이 기능은 ASP.NET 코어 2.0의 새로운 기능입니다.This feature is new in ASP.NET Core 2.0.

구성 기본값을 빈 문자열로 있지만 호스팅 시작 어셈블리는 항상 응용 프로그램의 어셈블리를 포함 합니다.Although the configuration value defaults to an empty string, the hosting startup assemblies always include the app's assembly. 호스팅 시작 어셈블리를 제공 하면 해당 파일은 응용 프로그램 시작 하는 동안 일반적인 서비스를 빌드할 때 로드에 대 한 응용 프로그램의 어셈블리에 추가 됩니다.When you provide hosting startup assemblies, they're added to the app's assembly for loading when the app builds its common services during startup.

WebHost.CreateDefaultBuilder(args)
    .UseSetting(WebHostDefaults.HostingStartupAssembliesKey, "assembly1;assembly2")
    ...

Url을 호스트 하는 것이 좋습니다.Prefer Hosting URLs

호스트와 구성 된 Url을 수신 해야 하는지 여부를 나타냅니다는 WebHostBuilder 대신 사용 하 여 구성 하는 것은 IServer 구현 합니다.Indicates whether the host should listen on the URLs configured with the WebHostBuilder instead of those configured with the IServer implementation.

: preferHostingUrlsKey: preferHostingUrls
형식: bool (true 또는 1)Type: bool (true or 1)
기본: trueDefault: true
사용 하 여 설정:PreferHostingUrlsSet using: PreferHostingUrls

이 기능은 ASP.NET 코어 2.0의 새로운 기능입니다.This feature is new in ASP.NET Core 2.0.

WebHost.CreateDefaultBuilder(args)
    .PreferHostingUrls(false)
    ...

호스팅 시작 방지Prevent Hosting Startup

호스팅 시작 어셈블리, 응용 프로그램의 어셈블리를 포함 하 여 자동 로드를 방지 합니다.Prevents the automatic loading of hosting startup assemblies, including the app's assembly.

: preventHostingStartupKey: preventHostingStartup
형식: bool (true 또는 1)Type: bool (true or 1)
기본: falseDefault: false
사용 하 여 설정:UseSettingSet using: UseSetting

이 기능은 ASP.NET 코어 2.0의 새로운 기능입니다.This feature is new in ASP.NET Core 2.0.

WebHost.CreateDefaultBuilder(args)
    .UseSetting(WebHostDefaults.PreventHostingStartupKey, "true")
    ...

서버 UrlServer URLs

IP 주소 또는 서버에서 요청을 수신 해야 하는 포트와 프로토콜 인 호스트 주소를 나타냅니다.Indicates the IP addresses or host addresses with ports and protocols that the server should listen on for requests.

: urlKey: urls
형식: 문자열Type: string
기본: http://localhost:5000Default: http://localhost:5000
사용 하 여 설정:UseUrlsSet using: UseUrls

세미콜론으로 구분 된로 설정 (;) URL의 목록 prefixes 서버 응답 해야 합니다.Set to a semicolon-separated (;) list of URL prefixes to which the server should respond. 예를 들어, http://localhost:123을 입력합니다.For example, http://localhost:123. 사용 하 여 "*" 서버 모든 IP 주소 또는 지정 된 포트 및 프로토콜을 사용 하 여 호스트 이름에 대 한 요청에 대 한 수신 대기 해야 함을 나타내기 위해 (예를 들어 http://*:5000).Use "*" to indicate that the server should listen for requests on any IP address or hostname using the specified port and protocol (for example, http://*:5000). 프로토콜 (http:// 또는 https://) 각 URL에 포함 되어 있어야 합니다.The protocol (http:// or https://) must be included with each URL. 지원 되는 형식의 서버 마다 다릅니다.Supported formats vary between servers.

WebHost.CreateDefaultBuilder(args)
    .UseUrls("http://*:5000;http://localhost:5001;https://hostname:5002")
    ...

Kestrel 자체 끝점 구성 API에 있습니다.Kestrel has its own endpoint configuration API. 자세한 내용은 ASP.NET Core의 Kestrel 웹 서버 구현을 참조하세요.For more information, see Kestrel web server implementation in ASP.NET Core.

시스템 종료 제한 시간Shutdown Timeout

웹 호스트를 종료 될 때까지 기다리는 시간을 지정 합니다.Specifies the amount of time to wait for the web host to shutdown.

: shutdownTimeoutSecondsKey: shutdownTimeoutSeconds
형식: intType: int
기본: 5Default: 5
사용 하 여 설정:UseShutdownTimeoutSet using: UseShutdownTimeout

키를 허용 하지만 intUseSetting (예를 들어 .UseSetting(WebHostDefaults.ShutdownTimeoutKey, "10")), UseShutdownTimeout 확장 메서드를 사용는 TimeSpan합니다.Although the key accepts an int with UseSetting (for example, .UseSetting(WebHostDefaults.ShutdownTimeoutKey, "10")), the UseShutdownTimeout extension method takes a TimeSpan. 이 기능은 ASP.NET 코어 2.0의 새로운 기능입니다.This feature is new in ASP.NET Core 2.0.

WebHost.CreateDefaultBuilder(args)
    .UseShutdownTimeout(TimeSpan.FromSeconds(10))
    ...

시작 어셈블리Startup Assembly

검색할 어셈블리 확인에서 Startup 클래스입니다.Determines the assembly to search for the Startup class.

: startupAssemblyKey: startupAssembly
형식: 문자열Type: string
기본: 응용 프로그램의 어셈블리Default: The app's assembly
사용 하 여 설정:UseStartupSet using: UseStartup

이름으로 어셈블리를 참조할 수 있습니다 (string) 또는 형식 (TStartup).You can reference the assembly by name (string) or type (TStartup). 여러 개인 경우 UseStartup 메서드가 호출 되어, 마지막 우선적으로 적용 합니다.If multiple UseStartup methods are called, the last one takes precedence.

WebHost.CreateDefaultBuilder(args)
    .UseStartup("StartupAssemblyName")
    ...
WebHost.CreateDefaultBuilder(args)
    .UseStartup<TStartup>()
    ...

웹 루트Web Root

응용 프로그램의 정적 자산에 대 한 상대 경로 설정합니다.Sets the relative path to the app's static assets.

: webrootKey: webroot
형식: 문자열Type: string
기본: 기본값은 "(Content Root)/wwwroot 지정 하지 않으면" 경로가 존재 하는 경우.Default: If not specified, the default is "(Content Root)/wwwroot", if the path exists. 경로가 존재 하지 않는 경우 아무 파일 공급자가 사용 됩니다.If the path doesn't exist, then a no-op file provider is used.
사용 하 여 설정:UseWebRootSet using: UseWebRoot

WebHost.CreateDefaultBuilder(args)
    .UseWebRoot("public")
    ...

구성을 무시Overriding configuration

사용 하 여 구성 호스트를 구성할 수 있습니다.Use Configuration to configure the host. 다음 예제에서는 호스트 구성을 필요에 따라 지정에 hosting.json 파일입니다.In the following example, host configuration is optionally specified in a hosting.json file. 모든 구성에서 로드 된 hosting.json 명령줄 인수 파일을 덮어쓸 수 있습니다.Any configuration loaded from the hosting.json file may be overridden by command-line arguments. 기본 제공된 구성 (에 config) 사용 하 여 호스트를 구성 하는 데는 UseConfiguration합니다.The built configuration (in config) is used to configure the host with UseConfiguration.

hosting.json:hosting.json:

{
    urls: "http://*:5005"
}

제공 하는 구성을 재정의 UseUrlshosting.json config 첫 번째, 명령줄 인수 구성 두 번째:Overriding the configuration provided by UseUrls with hosting.json config first, command-line argument config second:

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

    public static IWebHost BuildWebHost(string[] args)
    {
        var config = new ConfigurationBuilder()
            .SetBasePath(Directory.GetCurrentDirectory())
            .AddJsonFile("hosting.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!"));
            })
            .Build();
    }
}
참고

UseConfiguration 확장 메서드는 현재에서 반환 되는 구성 섹션을 구문 분석할 수 없습니다 GetSection (예를 들어 .UseConfiguration(Configuration.GetSection("section"))합니다.The UseConfiguration extension method isn't currently capable of parsing a configuration section returned by GetSection (for example, .UseConfiguration(Configuration.GetSection("section")). GetSection 메서드 요청 섹션에 있는 구성 키를 필터링 되지만 섹션 이름에는 키 (예를 들어 section:urls, section:environment).The GetSection method filters the configuration keys to the section requested but leaves the section name on the keys (for example, section:urls, section:environment). UseConfiguration 메서드에서 예상 키와 일치 하도록는 WebHostBuilder 키 (예를 들어 urls, environment).The UseConfiguration method expects the keys to match the WebHostBuilder keys (for example, urls, environment). 키에 대해 섹션 이름의 존재는 호스트 구성에서 섹션의 값을 방지 합니다.The presence of the section name on the keys prevents the section's values from configuring the host. 이 문제는 향후 릴리스에서 해결될 예정입니다.This issue will be addressed in an upcoming release. 자세한 내용 및 해결 방법에 대 한 참조 전체 키를 사용 하 여 WebHostBuilder.UseConfiguration에 구성 섹션을 전달합니다.For more information and workarounds, see Passing configuration section into WebHostBuilder.UseConfiguration uses full keys.

특정 URL에서 실행 하는 호스트를 지정 하려면 전달할 수 있습니다는 원하는 값에 명령 프롬프트에서 실행할 때 dotnet run합니다.To specify the host run on a particular URL, you could pass in the desired value from a command prompt when executing dotnet run. 명령줄 인수 재정의 urls 에서 값의 hosting.json 포트 8080에서 수신 하는 파일 및 서버:The command-line argument overrides the urls value from the hosting.json file, and the server listens on port 8080:

dotnet run --urls "http://*:8080"

순서 중요성Ordering importance

일부는 WebHostBuilder 설정을 먼저 읽습니다에서 환경 변수를 설정 합니다.Some of the WebHostBuilder settings are first read from environment variables, if set. 이러한 환경 변수 형식을 사용 하 여 ASPNETCORE_{configurationKey}합니다.These environment variables use the format ASPNETCORE_{configurationKey}. 설정 하면 기본적으로에서 서버가 수신 하는 Url을 설정 하려면 ASPNETCORE_URLS합니다.To set the URLs that the server listens on by default, you set ASPNETCORE_URLS.

구성을 지정 하 여 이러한 환경 변수 값을 재정의할 수 있습니다 (사용 하 여 UseConfiguration) 또는 값을 명시적으로 설정 하 여 (사용 하 여 UseSetting 명시적 확장 메서드 중 하나 또는 같은 UseUrls).You can override any of these environment variable values by specifying configuration (using UseConfiguration) or by setting the value explicitly (using UseSetting or one of the explicit extension methods, such as UseUrls). 호스트 선택한 옵션에 설정 하는 마지막 값을 사용 합니다.The host uses whichever option sets the value last. 프로그래밍 방식으로 값 중 하나에 기본 URL을 설정 되었지만 구성으로 재정의 될 수 있도록 하려는 경우 URL을 설정 후 명령줄 구성을 사용할 수 있습니다.If you want to programmatically set the default URL to one value but allow it to be overridden with configuration, you can use command-line configuration after setting the URL. 참조 덮어씁니다 구성합니다.See Overriding configuration.

호스트를 시작합니다.Starting the host

실행Run

Run 메서드 웹 앱을 시작 하 고 호스트 종료 될 때까지 호출 스레드를 차단 합니다.The Run method starts the web app and blocks the calling thread until the host is shutdown:

host.Run();

StartStart

호출 하 여 비블로킹 방식으로 호스트를 실행할 수 있습니다는 Start 메서드:You can run the host in a non-blocking manner by calling its Start method:

using (host)
{
    host.Start();
    Console.ReadLine();
}

에 대 한 Url 목록을 전달 하는 경우는 Start 지정 된 Url에서 수신 대기 메서드:If you pass a list of URLs to the Start method, it listens on the URLs specified:

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 정적 편의 메서드를 사용 합니다.You can initialize and start a new host using the pre-configured defaults of CreateDefaultBuilder using a static convenience method. 이러한 메서드는을 콘솔 출력 하지 않고 서버를 시작 WaitForShutdown (Ctrl-C/SIGINT 또는 SIGTERM) 중단 될 때까지 기다리는:These methods start the server without console output and with WaitForShutdown wait for a break (Ctrl-C/SIGINT or SIGTERM):

시작 (RequestDelegate 앱)Start(RequestDelegate app)

로 시작는 RequestDelegate:Start with a 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 "Hello World!" 응답을 받을 수Make a request in the browser to http://localhost:5000 to receive the response "Hello World!" WaitForShutdown(Ctrl-C/SIGINT 또는 SIGTERM) 중단이 발생 될 때까지 차단 됩니다.WaitForShutdown blocks until a break (Ctrl-C/SIGINT or SIGTERM) is issued. 응용 프로그램 표시는 Console.WriteLine 메시지 및 대기 키 누르기를 종료 합니다.The app displays the Console.WriteLine message and waits for a keypress to exit.

시작 (string url, RequestDelegate 앱)Start(string url, RequestDelegate app)

URL로 시작 하 고 RequestDelegate:Start with a URL and 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();
}

것과 동일한 결과가 생성 시작 (RequestDelegate app)를 제외 하 고 응용 프로그램에 대해 응답 http://localhost:8080합니다.Produces the same result as Start(RequestDelegate app), except the app responds on http://localhost:8080.

시작 (동작 routeBuilder)Start(Action routeBuilder)

인스턴스를 사용 하 여 IRouteBuilder (Microsoft.AspNetCore.Routing) 라우팅 미들웨어를 사용 하려면:Use an instance of IRouteBuilder (Microsoft.AspNetCore.Routing) to use routing middleware:

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

이 예제에서는 다음 브라우저 요청에서 사용 합니다.Use the following browser requests with the example:

요청Request 응답Response
http://localhost:5000/hello/Martin Hello, Martin!Hello, Martin!
http://localhost:5000/buenosdias/Catrina Catrina 부에노스아이레스 dias!Buenos dias, Catrina!
http://localhost:5000/throw/ooops! "Ooops!" 문자열을 사용 하 여 예외를 throw합니다.Throws an exception with string "ooops!"
http://localhost:5000/throw 문자열을 사용 하 여 예외를 throw "Uh 오!"Throws an exception with string "Uh oh!"
http://localhost:5000/Sante/Kevin Sante, Kevin!Sante, Kevin!
http://localhost:5000 Hello World!Hello World!

WaitForShutdown(Ctrl-C/SIGINT 또는 SIGTERM) 중단이 발생 될 때까지 차단 됩니다.WaitForShutdown blocks until a break (Ctrl-C/SIGINT or SIGTERM) is issued. 응용 프로그램 표시는 Console.WriteLine 메시지 및 대기 키 누르기를 종료 합니다.The app displays the Console.WriteLine message and waits for a keypress to exit.

시작 (문자열 url 동작 routeBuilder)Start(string url, Action routeBuilder)

URL과의 인스턴스를 사용 하 여 IRouteBuilder:Use a URL and an instance of 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 shutdown the host...");
    host.WaitForShutdown();
}

것과 동일한 결과가 생성 시작 (동작 routeBuilder)를 제외 하 고 응용 프로그램에서 응답 http://localhost:8080합니다.Produces the same result as Start(Action routeBuilder), except the app responds at http://localhost:8080.

StartWith (동작 앱)StartWith(Action app)

구성 하는 대리자를 제공는 IApplicationBuilder:Provide a delegate to configure an 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 shutdown the host...");
    host.WaitForShutdown();
}

브라우저에서 요청 수행 http://localhost:5000 "Hello World!" 응답을 받을 수Make a request in the browser to http://localhost:5000 to receive the response "Hello World!" WaitForShutdown(Ctrl-C/SIGINT 또는 SIGTERM) 중단이 발생 될 때까지 차단 됩니다.WaitForShutdown blocks until a break (Ctrl-C/SIGINT or SIGTERM) is issued. 응용 프로그램 표시는 Console.WriteLine 메시지 및 대기 키 누르기를 종료 합니다.The app displays the Console.WriteLine message and waits for a keypress to exit.

StartWith (문자열 url 동작 앱)StartWith(string url, Action app)

URL을 구성 하기 위한 대리자를 제공는 IApplicationBuilder:Provide a URL and a delegate to configure an 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 shutdown the host...");
    host.WaitForShutdown();
}

것과 동일한 결과가 생성 StartWith (동작 응용 프로그램)를 제외 하 고 응용 프로그램에 대해 응답 http://localhost:8080합니다.Produces the same result as StartWith(Action app), except the app responds on http://localhost:8080.

IHostingEnvironment 인터페이스IHostingEnvironment interface

IHostingEnvironment 인터페이스 응용 프로그램의 웹 호스팅 환경에 대 한 정보를 제공 합니다.The IHostingEnvironment interface provides information about the app's web hosting environment. 사용할 수 있습니다 생성자 삽입 얻으려고는 IHostingEnvironment 속성 및 확장 메서드를 사용 하려면:You can use constructor injection to obtain the IHostingEnvironment in order to use its properties and extension methods:

public class CustomFileReader
{
    private readonly IHostingEnvironment _env;

    public CustomFileReader(IHostingEnvironment env)
    {
        _env = env;
    }

    public string ReadFile(string filePath)
    {
        var fileProvider = _env.WebRootFileProvider;
        // Process the file here
    }
}

사용할 수는 규칙 기반 접근 방식을 를 환경에 따라 시작할 때 응용 프로그램을 구성 합니다.You can use a convention-based approach to configure your app at startup based on the environment. 삽입할 수 있습니다는 IHostingEnvironmentStartup 생성자에서 사용 하기 위해 ConfigureServices:Alternatively, you can inject the IHostingEnvironment into the Startup constructor for use in ConfigureServices:

public class Startup
{
    public Startup(IHostingEnvironment env)
    {
        HostingEnvironment = env;
    }

    public IHostingEnvironment HostingEnvironment { get; }

    public void ConfigureServices(IServiceCollection services)
    {
        if (HostingEnvironment.IsDevelopment())
        {
            // Development configuration
        }
        else
        {
            // Staging/Production configuration
        }

        var contentRootPath = HostingEnvironment.ContentRootPath;
    }
}
참고

이외에 IsDevelopment 확장 메서드를 IHostingEnvironment 제공 IsStaging, IsProduction, 및 IsEnvironment(string environmentName) 메서드.In addition to the IsDevelopment extension method, IHostingEnvironment offers IsStaging, IsProduction, and IsEnvironment(string environmentName) methods. 참조 여러 환경 작업 대 한 자세한 내용은 합니다.See Working with multiple environments for details.

IHostingEnvironment 서비스에 직접도 삽입 될 수 있습니다는 Configure 처리 파이프라인을 설정 하기 위한 메서드:The IHostingEnvironment service can also be injected directly into the Configure method for setting up your processing pipeline:

public void Configure(IApplicationBuilder app, IHostingEnvironment 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;
}

삽입할 수 있으며 IHostingEnvironmentInvoke 메서드를 사용자 지정을 만들 때 미들웨어:You can inject IHostingEnvironment into the Invoke method when creating custom middleware:

public async Task Invoke(HttpContext context, IHostingEnvironment env)
{
    if (env.IsDevelopment())
    {
        // Configure middleware for Development
    }
    else
    {
        // Configure middleware for Staging/Production
    }

    var contentRootPath = env.ContentRootPath;
}

IApplicationLifetime 인터페이스IApplicationLifetime interface

IApplicationLifetime 인터페이스 후 시작 및 종료 작업을 수행할 수 있습니다.The IApplicationLifetime interface allows you to perform post-startup and shutdown activities. 인터페이스에서 세 가지 속성으로 등록할 수 있는 취소 토큰은 Action 시작 및 종료 이벤트를 정의 하는 메서드.Three properties on the interface are cancellation tokens that you can register with Action methods to define startup and shutdown events. 또한 한 StopApplication 메서드.There's also a StopApplication method.

취소 토큰Cancellation Token 트리거된 경우 …Triggered when…
ApplicationStarted 호스트 시작 완벽 하 게 했습니다.The host has fully started.
ApplicationStopping 호스트에서 정상 종료를 수행 하 고 있습니다.The host is performing a graceful shutdown. 요청은 계속 처리할 수 있습니다.Requests may still be processing. 이 이벤트가 완료 될 때까지 차단을 종료 합니다.Shutdown blocks until this event completes.
ApplicationStopped 호스트에서 정상 종료를 완료 합니다.The host is completing a graceful shutdown. 모든 요청을 완전히 처리 되어야 합니다.All requests should be completely processed. 이 이벤트가 완료 될 때까지 차단을 종료 합니다.Shutdown blocks until this event completes.
메서드Method 작업Action
StopApplication 현재 응용 프로그램의 종료를 요청 합니다.Requests termination of the current application.
public class Startup 
{
    public void Configure(IApplicationBuilder app, IApplicationLifetime 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
    }
}

System.ArgumentException 문제 해결Troubleshooting System.ArgumentException

ASP.NET Core 2.0만에 적용 됩니다.Applies to ASP.NET Core 2.0 Only

삽입 하 여 호스트를 작성 하는 경우 IStartup 호출 보다는 종속성 주입 컨테이너에 직접 UseStartup 또는 Configure, 다음과 같은 오류가 발생할 수 있습니다: Unhandled Exception: System.ArgumentException: A valid non-empty application name must be provided합니다.If you build the host by injecting IStartup directly into the dependency injection container rather than calling UseStartup or Configure, you may encounter the following error: Unhandled Exception: System.ArgumentException: A valid non-empty application name must be provided.

이 때문에 발생는 applicationName(ApplicationKey) (현재 어셈블리)를 검색 하는 데 필요한 HostingStartupAttributes합니다.This occurs because the applicationName(ApplicationKey) (the current assembly) is required to scan for HostingStartupAttributes. 수동으로 삽입할 경우 IStartup 종속성 주입 컨테이너에는 다음 호출을 추가 하면 WebHostBuilder 지정 된 어셈블리 이름:If you manually inject IStartup into the dependency injection container, add the following call to your WebHostBuilder with the assembly name specified:

WebHost.CreateDefaultBuilder(args)
    .UseSetting("applicationName", "<Assembly Name>")
    ...

Dummy 또는 추가할 Configure 하 여 WebHostBuilder로 설정 하는 applicationName(ApplicationKey) 자동으로:Alternatively, add a dummy Configure to your WebHostBuilder, which sets the applicationName(ApplicationKey) automatically:

WebHost.CreateDefaultBuilder(args)
    .Configure(_ => { })
    ...

참고:는 유일한 및 ASP.NET 코어 2.0 릴리스로 필요한 경우에 호출 하지 않으면 UseStartup 또는 Configure합니다.NOTE: This is only required with the ASP.NET Core 2.0 release and only when you don't call UseStartup or Configure.

자세한 내용은 참조 공지: Microsoft.Extensions.PlatformAbstractions 되었습니다 (주석)를 제거StartupInjection 샘플합니다.For more information, see Announcements: Microsoft.Extensions.PlatformAbstractions has been removed (comment) and the StartupInjection sample.

추가 리소스Additional resources