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

Luke Latham으로By Luke Latham

ASP.NET Core 응용 프로그램 구성 및 실행 한 호스트합니다.ASP.NET Core apps configure and launch a host. 호스트는 응용 프로그램 시작 및 수명 관리 담당 합니다.The host 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 the 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. 응용 프로그램 프로젝트의 루트 폴더에서 시작 되 면 프로젝트의 루트 폴더 콘텐츠 루트도 사용 됩니다.When the app is started from the project's root folder, the project's root folder is used as the content root. 사용 되는 기본 이것이 Visual Studiodotnet 새 템플릿을합니다.This is the default used in Visual Studio and the dotnet new templates.

응용 프로그램 구성에 대 한 자세한 내용은 참조 하십시오. ASP.NET Core에서 구성을합니다.For more information on app configuration, see Configuration in ASP.NET Core.

참고

정적을 사용 하는 대신 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 탭을 참조 하십시오.For more information, see the ASP.NET Core 1.x tab.

한 호스트를 설정할 때 구성ConfigureServices 메서드를 제공 될 수 있습니다.When setting up a host, Configure and ConfigureServices methods can be provided. 경우는 Startup 클래스 지정을 정의 해야 합니다는 Configure 메서드.If a Startup class is specified, 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 호스트 구성 값을 설정 하려면 다음 방법 중 하나에 의존 합니다.WebHostBuilder relies on the following approaches to set the host configuration values:

  • 형식으로 환경 변수를 포함 하는 호스트 작성기 구성을 ASPNETCORE_{configurationKey}합니다.Host builder configuration, which includes environment variables with the format ASPNETCORE_{configurationKey}. 예를 들어, ASPNETCORE_URLS을 입력합니다.For example, ASPNETCORE_URLS.
  • 명시적 메서드 같은 CaptureStartupErrors합니다.Explicit methods, such as CaptureStartupErrors.
  • UseSetting 와 연결 된 키입니다.UseSetting and the associated key. 사용 하 여 값을 설정할 때 UseSetting, 유형에 관계 없이 한 문자열로 값이 설정 됩니다.When setting a value with UseSetting, the value is set as a string regardless of the type.

호스트는 선택한 옵션에 설정 하는 마지막 값을 사용 합니다.The host uses whichever option sets a value last. 자세한 내용은 참조 덮어씁니다 구성 다음 섹션에 있습니다.For more information, see Overriding configuration in the next section.

시작 오류 캡처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
환경 변수:ASPNETCORE_CAPTURESTARTUPERRORSEnvironment variable: ASPNETCORE_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
환경 변수:ASPNETCORE_CONTENTROOTEnvironment variable: ASPNETCORE_CONTENTROOT

에 대 한 기본 경로로 콘텐츠 루트는 또한는 웹 루트 설정을합니다.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
환경 변수:ASPNETCORE_DETAILEDERRORSEnvironment variable: ASPNETCORE_DETAILEDERRORS

사용 하는 경우 (또는 경우는 환경 로 설정 되어 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
환경 변수:ASPNETCORE_ENVIRONMENTEnvironment variable: ASPNETCORE_ENVIRONMENT

환경 값으로 설정할 수 있습니다.The environment can be set 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
환경 변수:ASPNETCORE_HOSTINGSTARTUPASSEMBLIESEnvironment variable: ASPNETCORE_HOSTINGSTARTUPASSEMBLIES

호스팅 시작 로드할 어셈블리를 시작할 때의 세미콜론으로 구분 된 문자열입니다.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 hosting startup assemblies are provided, 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
환경 변수:ASPNETCORE_PREFERHOSTINGURLSEnvironment variable: ASPNETCORE_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 hosting startup assemblies configured by the app's assembly. 참조 IHostingStartup를 사용 하 여 외부 어셈블리에서 응용 프로그램 기능 추가 자세한 정보에 대 한 합니다.See Add app features from an external assembly using IHostingStartup for more information.

: preventHostingStartupKey: preventHostingStartup
형식: bool (true 또는 1)Type: bool (true or 1)
기본: falseDefault: false
사용 하 여 설정:UseSettingSet using: UseSetting
환경 변수:ASPNETCORE_PREVENTHOSTINGSTARTUPEnvironment variable: ASPNETCORE_PREVENTHOSTINGSTARTUP

이 기능은 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
환경 변수:ASPNETCORE_URLSEnvironment variable: ASPNETCORE_URLS

세미콜론으로 구분 된로 설정 (;) 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
환경 변수:ASPNETCORE_SHUTDOWNTIMEOUTSECONDSEnvironment variable: ASPNETCORE_SHUTDOWNTIMEOUTSECONDS

키를 허용 하지만 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
환경 변수:ASPNETCORE_STARTUPASSEMBLYEnvironment variable: ASPNETCORE_STARTUPASSEMBLY

이름으로 어셈블리 (string) 또는 형식 (TStartup)를 참조할 수 있습니다.The assembly by name (string) or type (TStartup) can be referenced. 여러 개인 경우 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
환경 변수:ASPNETCORE_WEBROOTEnvironment variable: ASPNETCORE_WEBROOT

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, the desired value can be passed in 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"

호스트를 시작합니다.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 메서드:Run the host in a non-blocking manner by calling its Start method:

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

Url 목록에 전달 되 면는 Start 메서드를 지정 된 Url에서 수신 합니다.If a list of URLs is passed 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 정적 편의 메서드를 사용 합니다.The app 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 속성 및 확장 메서드를 사용 하려면: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
    }
}

A 규칙 기반 접근 방식을 는 시작할 때 환경에 따라 응용 프로그램을 구성 하는 데 사용할 수 있습니다.A convention-based approach can be used to configure the app at startup based on the environment. 삽입 또는 IHostingEnvironmentStartup 생성자에서 사용 하기 위해 ConfigureServices:Alternatively, 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 the 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;
}

IHostingEnvironment에 삽입할 수는 Invoke 메서드 사용자 지정을 만들 때 미들웨어:IHostingEnvironment can be injected 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 후 시작 및 종료 작업에 대 한 허용 합니다.IApplicationLifetime allows for post-startup and shutdown activities. 인터페이스에서 세 가지 속성을 등록 하는 데 사용 되는 취소 토큰은 Action 시작 및 종료 이벤트를 정의 하는 메서드.Three properties on the interface are cancellation tokens used to register Action methods that 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 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:A host may be built by injecting IStartup directly into the dependency injection container rather than calling UseStartup or Configure:

services.AddSingleton<IStartup, Startup>();

호스트는 이러한 방식으로 작성 되 면 다음과 같은 오류가 발생할 수 있습니다.If the host is built this way, the following error may occur:

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 the app manually injects IStartup into the dependency injection container, add the following call to WebHostBuilder with the assembly name specified:

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

또는 dummy 추가할 ConfigureWebHostBuilder로 설정 하는 applicationName(ApplicationKey) 자동으로:Alternatively, add a dummy Configure to the 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 the app doesn'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