ASP.NET Core에서 앱 시작

참고 항목

이 문서의 최신 버전은 아닙니다. 현재 릴리스는 이 문서의 .NET 8 버전을 참조 하세요.

Important

이 정보는 상업적으로 출시되기 전에 실질적으로 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보에 대해 어떠한 명시적, 또는 묵시적인 보증을 하지 않습니다.

현재 릴리스는 이 문서의 .NET 8 버전을 참조 하세요.

작성자: Rick Anderson

웹 템플릿으로 만든 ASP.NET Core 앱은 Program.cs 파일에 애플리케이션 시작 코드를 포함합니다.

다음 앱 시작 코드는 다음을 지원합니다.

var builder = WebApplication.CreateBuilder(args);

// Add services to the container.
builder.Services.AddRazorPages();
builder.Services.AddControllersWithViews();

var app = builder.Build();

// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/Error");
    app.UseHsts();
}

app.UseHttpsRedirection();
app.UseStaticFiles();

app.UseAuthorization();

app.MapGet("/hi", () => "Hello!");

app.MapDefaultControllerRoute();
app.MapRazorPages();

app.Run();

EventSource를 사용하는 앱은 시작 시간을 측정하여 시작 성능을 이해하고 최적화할 수 있습니다. Microsoft.AspNetCore.HostingServerReady 이벤트는 서버가 요청에 응답할 준비가 된 지점을 나타냅니다.

애플리케이션 시작에 대한 자세한 내용은 ASP.NET Core 기본 사항 개요를 참조하세요.

시작 필터로 시작 확장

IStartupFilter는 다음 용도로 사용합니다.

  • 명시적 호출 없이 앱 미들웨어 파이프라인의 시작 또는 끝에서 미들웨어를 구성하려면 Use{Middleware}. 기본 미들웨어를 명시적으로 등록하지 않고 파이프라인의 시작 부분에 기본값을 추가하는 데 사용합니다 IStartupFilter . IStartupFilter는 다른 구성 요소가 앱 작성자를 대신하여 Use{Middleware}를 호출하는 것을 허용합니다.
  • Configure 메서드의 파이프라인을 만듭니다. IStartupFilter.Configure는 라이브러리에서 추가된 미들웨어 이전 또는 이후에 실행할 미들웨어를 설정할 수 있습니다.

IStartupFilterAction<IApplicationBuilder>를 받고 반환하는 Configure를 구현합니다. IApplicationBuilder는 앱의 요청 파이프라인을 구성하는 클래스를 정의합니다. 자세한 내용은 IApplicationBuilder로 미들웨어 파이프라인 만들기를 참조하세요.

IStartupFilter는 요청 파이프라인에서 하나 이상의 미들웨어를 추가할 수 있습니다. 필터는 서비스 컨테이너에 추가된 순서 대로 호출됩니다. 필터는 다음 필터에 컨트롤을 전달하기 전이나 후에 미들웨어를 추가할 수 있으므로 앱 파이프라인의 시작 또는 끝에 추가합니다.

다음 예제에서는 IStartupFilter를 사용하여 미들웨어를 등록하는 방법을 보여줍니다. RequestSetOptionsMiddleware 미들웨어는 쿼리 문자열 매개 변수에서 옵션 값을 설정합니다.

public class RequestSetOptionsMiddleware
{
    private readonly RequestDelegate _next;

    public RequestSetOptionsMiddleware(RequestDelegate next)
    {
        _next = next;
    }

    // Test with https://localhost:5001/Privacy/?option=Hello
    public async Task Invoke(HttpContext httpContext)
    {
        var option = httpContext.Request.Query["option"];

        if (!string.IsNullOrWhiteSpace(option))
        {
            httpContext.Items["option"] = WebUtility.HtmlEncode(option);
        }

        await _next(httpContext);
    }
}

RequestSetOptionsMiddlewareRequestSetOptionsStartupFilter 클래스에서 구성됩니다.

namespace WebStartup.Middleware;
// <snippet1>
public class RequestSetOptionsStartupFilter : IStartupFilter
{
    public Action<IApplicationBuilder> Configure(Action<IApplicationBuilder> next)
    {
        return builder =>
        {
            builder.UseMiddleware<RequestSetOptionsMiddleware>();
            next(builder);
        };
    }
}
// </snippet1>

다음 IStartupFilter 에서 등록됩니다.Program.cs

using WebStartup.Middleware;

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddRazorPages();
builder.Services.AddTransient<IStartupFilter,
                      RequestSetOptionsStartupFilter>();

var app = builder.Build();

if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/Error");
    app.UseHsts();
}

app.UseHttpsRedirection();
app.UseStaticFiles();

app.UseRouting();

app.UseAuthorization();

app.MapRazorPages();

app.Run();

쿼리 문자열 매개 변수 option 가 제공되면 미들웨어는 ASP.NET Core 미들웨어가 응답을 렌더링하기 전에 값 할당을 처리합니다.

@page
@model PrivacyModel
@{
    ViewData["Title"] = "Privacy Policy";
}
<h1>@ViewData["Title"]</h1>

<p> Append query string ?option=hello</p>
Option String: @HttpContext.Items["option"];

미들웨어 실행 순서는 IStartupFilter 등록 순서로 설정됩니다.

  • 여러 IStartupFilter 구현은 동일한 개체와 상호 작용할 수 있습니다. 순서 지정이 중요한 경우 해당 미들웨어가 실행해야 하는 순서와 일치하도록 해당 IStartupFilter 서비스 등록의 순서를 지정합니다.

  • 라이브러리는 IStartupFilter로 등록된 다른 앱 미들웨어 전이나 후에 실행하는 하나 이상의 IStartupFilter 구현으로 미들웨어를 추가할 수 있습니다. 라이브러리의 IStartupFilter에 의해 추가되는 미들웨어 전에 IStartupFilter 미들웨어를 호출하려면 다음을 수행합니다.

    • 라이브러리가 서비스 컨테이너에 추가되기 전에 서비스 등록의 위치를 지정합니다.
    • 나중에 호출하려면 라이브러리가 추가된 후에 서비스 등록의 위치를 지정합니다.

참고: 재정 Configure의할 때는 ASP.NET Core 앱을 확장할 수 없습니다. 자세한 내용은 이 GitHub 문제를 참조하세요.

시작 시 외부 어셈블리로부터 구성 추가

IHostingStartup 구현을 사용하면 앱 파일 외부의 외부 어셈블리에서 시작할 때 앱 Program.cs 에 향상된 기능을 추가할 수 있습니다. 자세한 내용은 ASP.NET Core에서 호스팅 시작 어셈블리 사용을 참조하세요.

시작, ConfigureServices 및 구성

최소 호스팅 모델에서 ConfigureServices 메서드 및 Configure 메서드를 사용하는 방법에 대한 자세한 내용은 다음을 참조하세요.

웹 템플릿으로 만든 ASP.NET Core 앱은 Program.cs 파일에 애플리케이션 시작 코드를 포함합니다.

다음 앱 시작 코드는 다음을 지원합니다.

var builder = WebApplication.CreateBuilder(args);

// Add services to the container.
builder.Services.AddRazorPages();
builder.Services.AddControllersWithViews();

var app = builder.Build();

// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/Error");
    app.UseHsts();
}

app.UseHttpsRedirection();
app.UseStaticFiles();

app.UseAuthorization();

app.MapGet("/hi", () => "Hello!");

app.MapDefaultControllerRoute();
app.MapRazorPages();

app.Run();

애플리케이션 시작에 대한 자세한 내용은 ASP.NET Core 기본 사항 개요를 참조하세요.

시작 필터로 시작 확장

IStartupFilter는 다음 용도로 사용합니다.

  • 명시적 호출 없이 앱 미들웨어 파이프라인의 시작 또는 끝에서 미들웨어를 구성하려면 Use{Middleware}. 기본 미들웨어를 명시적으로 등록하지 않고 파이프라인의 시작 부분에 기본값을 추가하는 데 사용합니다 IStartupFilter . IStartupFilter는 다른 구성 요소가 앱 작성자를 대신하여 Use{Middleware}를 호출하는 것을 허용합니다.
  • Configure 메서드의 파이프라인을 만듭니다. IStartupFilter.Configure는 라이브러리에서 추가된 미들웨어 이전 또는 이후에 실행할 미들웨어를 설정할 수 있습니다.

IStartupFilterAction<IApplicationBuilder>를 받고 반환하는 Configure를 구현합니다. IApplicationBuilder는 앱의 요청 파이프라인을 구성하는 클래스를 정의합니다. 자세한 내용은 IApplicationBuilder로 미들웨어 파이프라인 만들기를 참조하세요.

IStartupFilter는 요청 파이프라인에서 하나 이상의 미들웨어를 추가할 수 있습니다. 필터는 서비스 컨테이너에 추가된 순서 대로 호출됩니다. 필터는 다음 필터에 컨트롤을 전달하기 전이나 후에 미들웨어를 추가할 수 있으므로 앱 파이프라인의 시작 또는 끝에 추가합니다.

다음 예제에서는 IStartupFilter를 사용하여 미들웨어를 등록하는 방법을 보여줍니다. RequestSetOptionsMiddleware 미들웨어는 쿼리 문자열 매개 변수에서 옵션 값을 설정합니다.

public class RequestSetOptionsMiddleware
{
    private readonly RequestDelegate _next;

    public RequestSetOptionsMiddleware(RequestDelegate next)
    {
        _next = next;
    }

    // Test with https://localhost:5001/Privacy/?option=Hello
    public async Task Invoke(HttpContext httpContext)
    {
        var option = httpContext.Request.Query["option"];

        if (!string.IsNullOrWhiteSpace(option))
        {
            httpContext.Items["option"] = WebUtility.HtmlEncode(option);
        }

        await _next(httpContext);
    }
}

RequestSetOptionsMiddlewareRequestSetOptionsStartupFilter 클래스에서 구성됩니다.

namespace WebStartup.Middleware;
// <snippet1>
public class RequestSetOptionsStartupFilter : IStartupFilter
{
    public Action<IApplicationBuilder> Configure(Action<IApplicationBuilder> next)
    {
        return builder =>
        {
            builder.UseMiddleware<RequestSetOptionsMiddleware>();
            next(builder);
        };
    }
}
// </snippet1>

다음 IStartupFilter 에서 등록됩니다.Program.cs

using WebStartup.Middleware;

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddRazorPages();
builder.Services.AddTransient<IStartupFilter,
                      RequestSetOptionsStartupFilter>();

var app = builder.Build();

if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/Error");
    app.UseHsts();
}

app.UseHttpsRedirection();
app.UseStaticFiles();

app.UseRouting();

app.UseAuthorization();

app.MapRazorPages();

app.Run();

쿼리 문자열 매개 변수 option 가 제공되면 미들웨어는 ASP.NET Core 미들웨어가 응답을 렌더링하기 전에 값 할당을 처리합니다.

@page
@model PrivacyModel
@{
    ViewData["Title"] = "Privacy Policy";
}
<h1>@ViewData["Title"]</h1>

<p> Append query string ?option=hello</p>
Option String: @HttpContext.Items["option"];

미들웨어 실행 순서는 IStartupFilter 등록 순서로 설정됩니다.

  • 여러 IStartupFilter 구현은 동일한 개체와 상호 작용할 수 있습니다. 순서 지정이 중요한 경우 해당 미들웨어가 실행해야 하는 순서와 일치하도록 해당 IStartupFilter 서비스 등록의 순서를 지정합니다.

  • 라이브러리는 IStartupFilter로 등록된 다른 앱 미들웨어 전이나 후에 실행하는 하나 이상의 IStartupFilter 구현으로 미들웨어를 추가할 수 있습니다. 라이브러리의 IStartupFilter에 의해 추가되는 미들웨어 전에 IStartupFilter 미들웨어를 호출하려면 다음을 수행합니다.

    • 라이브러리가 서비스 컨테이너에 추가되기 전에 서비스 등록의 위치를 지정합니다.
    • 나중에 호출하려면 라이브러리가 추가된 후에 서비스 등록의 위치를 지정합니다.

참고: 재정 Configure의할 때는 ASP.NET Core 앱을 확장할 수 없습니다. 자세한 내용은 해당 GitHub 이슈를 참조하세요.

시작 시 외부 어셈블리로부터 구성 추가

IHostingStartup 구현을 사용하면 앱 파일 외부의 외부 어셈블리에서 시작할 때 앱 Program.cs 에 향상된 기능을 추가할 수 있습니다. 자세한 내용은 ASP.NET Core에서 호스팅 시작 어셈블리 사용을 참조하세요.

Startup 클래스는 서비스와 응용 프로그램의 요청 파이프라인을 구성합니다.

시작 클래스

ASP.NET Core 앱은 규칙에 따라 Startup으로 이름이 지정된 Startup 클래스를 사용합니다. Startup 클래스:

  • 선택적으로 앱의 서비스를 구성하는 ConfigureServices 메서드를 포함합니다. 서비스는 앱 기능을 제공하는 재사용 가능한 구성 요소입니다. 서비스는 ConfigureServices에서 등록되며 DI(종속성 주입) 또는 ApplicationServices를 통해 앱 전체에서 사용됩니다.
  • 앱의 요청 처리 파이프라인을 만드는 Configure 메서드가 포함되어 있습니다.

ConfigureServicesConfigure는 앱 시작 시 ASP.NET Core 런타임에 의해 호출됩니다.

public class Startup
{
    public Startup(IConfiguration configuration)
    {
        Configuration = configuration;
    }

    public IConfiguration Configuration { get; }

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddRazorPages();
    }

    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }
        else
        {
            app.UseExceptionHandler("/Error");
            app.UseHsts();
        }

        app.UseHttpsRedirection();
        app.UseStaticFiles();

        app.UseRouting();

        app.UseAuthorization();

        app.UseEndpoints(endpoints =>
        {
            endpoints.MapRazorPages();
        });
    }
}

앞의 샘플은 Razor Pages에 해당하며 MVC 버전도 비슷합니다.

앱의 호스트가 빌드될 때 Startup 클래스가 지정됩니다. Startup 클래스는 일반적으로 호스트 작성기에서 WebHostBuilderExtensions.UseStartup/<TStartup> 메서드를 호출하여 지정됩니다.

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

    public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .ConfigureWebHostDefaults(webBuilder =>
            {
                webBuilder.UseStartup<Startup>();
            });
}

호스트는 Startup 클래스 생성자에 사용할 수 있는 서비스를 제공합니다. 앱은 ConfigureServices를 통해 추가 서비스를 추가합니다. 그러면 호스트 및 앱 서비스 모두를 Configure 및 앱 전체에서 사용할 수 있습니다.

제네릭 호스트(IHostBuilder)를 사용할 경우 다음 서비스 유형만 Startup 생성자에 삽입할 수 있습니다.

public class Startup
{
    private readonly IWebHostEnvironment _env;

    public Startup(IConfiguration configuration, IWebHostEnvironment env)
    {
        Configuration = configuration;
        _env = env;
    }

    public IConfiguration Configuration { get; }

    public void ConfigureServices(IServiceCollection services)
    {
        if (_env.IsDevelopment())
        {
        }
        else
        {
        }
    }
}

Configure 메서드가 호출될 때까지 대부분의 서비스를 사용할 수 없습니다.

여러 Startup

앱에서 다양한 환경(예: StartupDevelopment)에 대해 별도의 Startup 클래스를 정의할 때 런타임에 적절한 Startup 클래스가 선택됩니다. 이름 접미사가 현재 환경과 일치하는 클래스에 우선 순위가 부여됩니다. 앱이 개발 환경에서 실행되고 Startup 클래스 및 StartupDevelopment 클래스 모두를 포함하는 경우 StartupDevelopment 클래스가 사용됩니다. 자세한 내용은 여러 환경 사용을 참조하세요.

호스트에 대한 자세한 내용은 호스트를 참조하세요. 시작하는 동안 오류를 처리하는 방법은 시작 예외 처리를 참조하세요.

ConfigureServices 메서드

ConfigureServices 메서드는 다음과 같습니다.

  • 선택 사항.
  • Configure 메서드 전에 호스트에 의해 호출되어 앱의 서비스를 구성합니다.
  • 여기서 구성 옵션은 규칙에 의해 설정됩니다.

호스트는 Startup 메서드가 호출되기 전에 일부 서비스를 구성할 수 있습니다. 자세한 내용은 호스트를 참조하세요.

실질적인 설정이 필요한 기능의 경우 IServiceCollectionAdd{Service} 확장 메서드가 있습니다. 예를 들어 AddDbContext, AddDefaultIdentity, AddEntityFrameworkStores 및 AddRazorPages가 있습니다.

public class Startup
{
    public Startup(IConfiguration configuration)
    {
        Configuration = configuration;
    }

    public IConfiguration Configuration { get; }

    public void ConfigureServices(IServiceCollection services)
    {

        services.AddDbContext<ApplicationDbContext>(options =>
            options.UseSqlServer(
                Configuration.GetConnectionString("DefaultConnection")));
        services.AddDefaultIdentity<IdentityUser>(
            options => options.SignIn.RequireConfirmedAccount = true)
            .AddEntityFrameworkStores<ApplicationDbContext>();

        services.AddRazorPages();
    }

서비스 컨테이너에 서비스를 추가하면 앱 내 및 Configure 메서드에서 사용할 수 있습니다. 서비스는 종속성 주입 또는 ApplicationServices를 통해 해결됩니다.

Configure 메서드

Configure 메서드는 앱이 HTTP 요청에 응답하는 방식을 지정하는 데 사용됩니다. 요청 파이프라인은 미들웨어 구성 요소를 IApplicationBuilder 인스턴스에 추가하여 구성됩니다. IApplicationBuilderConfigure 메서드에 사용할 수 있지만 서비스 컨테이너에 등록되지 않습니다. 호스팅은 IApplicationBuilder를 만들고 Configure에 직접 전달합니다.

ASP.NET Core 템플릿은 다음을 지원하는 파이프라인을 구성합니다.

public class Startup
{
    public Startup(IConfiguration configuration)
    {
        Configuration = configuration;
    }

    public IConfiguration Configuration { get; }

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddRazorPages();
    }

    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }
        else
        {
            app.UseExceptionHandler("/Error");
            app.UseHsts();
        }

        app.UseHttpsRedirection();
        app.UseStaticFiles();

        app.UseRouting();

        app.UseAuthorization();

        app.UseEndpoints(endpoints =>
        {
            endpoints.MapRazorPages();
        });
    }
}

앞의 샘플은 Razor Pages에 해당하며 MVC 버전도 비슷합니다.

Use 확장 메서드는 요청 파이프라인에 하나 이상의 미들웨어 구성 요소를 추가합니다. 예를 들어 UseStaticFiles정적 파일을 제공하도록 미들웨어를 구성합니다.

요청 파이프라인의 각 미들웨어 구성 요소는 파이프라인의 다음 구성 요소를 호출하거나 적절한 경우 체인을 단락(short-circuiting)하는 일을 담당합니다.

IWebHostEnvironment, ILoggerFactory 같은 추가 서비스 또는 ConfigureServices에 정의된 항목은 Configure 메서드 시그니처에서 지정할 수 있습니다. 이 서비스를 사용할 수 있는 경우 삽입됩니다.

IApplicationBuilder를 사용하는 방법 및 미들웨어 처리 순서에 대한 자세한 내용은 ASP.NET Core 미들웨어를 참조하세요.

Startup을 사용하지 않고 서비스 구성

Startup 클래스를 사용하지 않고 서비스 및 요청 처리 파이프라인을 구성하려면 호스트 작성기에서 ConfigureServicesConfigure 편의성 메서드를 호출합니다. ConfigureServices에 대한 여러 호출은 서로 추가합니다. 여러 Configure 메서드 호출이 있는 경우 마지막 Configure 호출이 사용됩니다.

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

    public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .ConfigureAppConfiguration((hostingContext, config) =>
            {
            })
            .ConfigureWebHostDefaults(webBuilder =>
            {
                webBuilder.ConfigureServices(services =>
                {
                    services.AddControllersWithViews();
                })
                .Configure(app =>
                {
                    var loggerFactory = app.ApplicationServices
                        .GetRequiredService<ILoggerFactory>();
                    var logger = loggerFactory.CreateLogger<Program>();
                    var env = app.ApplicationServices.GetRequiredService<IWebHostEnvironment>();
                    var config = app.ApplicationServices.GetRequiredService<IConfiguration>();

                    logger.LogInformation("Logged in Configure");

                    if (env.IsDevelopment())
                    {
                        app.UseDeveloperExceptionPage();
                    }
                    else
                    {
                        app.UseExceptionHandler("/Home/Error");
                        app.UseHsts();
                    }

                    var configValue = config["MyConfigKey"];
                });
            });
        });
}

시작 필터로 시작 확장

IStartupFilter는 다음 용도로 사용합니다.

  • Use{Middleware}를 명시적으로 호출하지 않고 앱의 Configure 미들웨어 파이프라인의 시작 또는 끝 부분에서 미들웨어를 구성합니다. IStartupFilter는 ASP.NET Core에서 앱 작성자가 명시적으로 기본 미들웨어를 등록할 필요 없이 파이프라인의 시작 부분에 기본값을 추가하는 데 사용됩니다. IStartupFilter는 다른 구성 요소가 앱 작성자를 대신하여 Use{Middleware}를 호출하는 것을 허용합니다.
  • Configure 메서드의 파이프라인을 만듭니다. IStartupFilter.Configure는 라이브러리에서 추가된 미들웨어 이전 또는 이후에 실행할 미들웨어를 설정할 수 있습니다.

IStartupFilterAction<IApplicationBuilder>를 받고 반환하는 Configure를 구현합니다. IApplicationBuilder는 앱의 요청 파이프라인을 구성하는 클래스를 정의합니다. 자세한 내용은 IApplicationBuilder로 미들웨어 파이프라인 만들기를 참조하세요.

IStartupFilter는 요청 파이프라인에서 하나 이상의 미들웨어를 추가할 수 있습니다. 필터는 서비스 컨테이너에 추가된 순서 대로 호출됩니다. 필터는 다음 필터에 컨트롤을 전달하기 전이나 후에 미들웨어를 추가할 수 있으므로 앱 파이프라인의 시작 또는 끝에 추가합니다.

다음 예제에서는 IStartupFilter를 사용하여 미들웨어를 등록하는 방법을 보여줍니다. RequestSetOptionsMiddleware 미들웨어는 쿼리 문자열 매개 변수에서 옵션 값을 설정합니다.

public class RequestSetOptionsMiddleware
{
    private readonly RequestDelegate _next;

    public RequestSetOptionsMiddleware( RequestDelegate next )
    {
        _next = next;
    }

    // Test with https://localhost:5001/Privacy/?option=Hello
    public async Task Invoke(HttpContext httpContext)
    {
        var option = httpContext.Request.Query["option"];

        if (!string.IsNullOrWhiteSpace(option))
        {
            httpContext.Items["option"] = WebUtility.HtmlEncode(option);
        }

        await _next(httpContext);
    }
}

RequestSetOptionsMiddlewareRequestSetOptionsStartupFilter 클래스에서 구성됩니다.

public class RequestSetOptionsStartupFilter : IStartupFilter
{
    public Action<IApplicationBuilder> Configure(Action<IApplicationBuilder> next)
    {
        return builder =>
        {
            builder.UseMiddleware<RequestSetOptionsMiddleware>();
            next(builder);
        };
    }
}

IStartupFilterConfigureServices의 서비스 컨테이너에 등록됩니다.

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

    public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
           .ConfigureAppConfiguration((hostingContext, config) =>
           {
           })
         .ConfigureWebHostDefaults(webBuilder =>
         {
             webBuilder.UseStartup<Startup>();
         })
        .ConfigureServices(services =>
        {
            services.AddTransient<IStartupFilter,
                      RequestSetOptionsStartupFilter>();
        });
}

option에 대한 쿼리 문자열 매개 변수가 제공되는 경우 미들웨어는 ASP.NET Core 미들웨어가 응답을 렌더링하기 전에 값 할당을 처리합니다.

미들웨어 실행 순서는 IStartupFilter 등록 순서로 설정됩니다.

  • 여러 IStartupFilter 구현은 동일한 개체와 상호 작용할 수 있습니다. 순서 지정이 중요한 경우 해당 미들웨어가 실행해야 하는 순서와 일치하도록 해당 IStartupFilter 서비스 등록의 순서를 지정합니다.

  • 라이브러리는 IStartupFilter로 등록된 다른 앱 미들웨어 전이나 후에 실행하는 하나 이상의 IStartupFilter 구현으로 미들웨어를 추가할 수 있습니다. 라이브러리의 IStartupFilter에 의해 추가되는 미들웨어 전에 IStartupFilter 미들웨어를 호출하려면 다음을 수행합니다.

    • 라이브러리가 서비스 컨테이너에 추가되기 전에 서비스 등록의 위치를 지정합니다.
    • 나중에 호출하려면 라이브러리가 추가된 후에 서비스 등록의 위치를 지정합니다.

시작 시 외부 어셈블리로부터 구성 추가

IHostingStartup 구현은 시작 시 앱의 Startup 클래스 외부에 있는 외부 어셈블리에서 앱에 향상된 기능을 추가할 수 있습니다. 자세한 내용은 ASP.NET Core에서 호스팅 시작 어셈블리 사용을 참조하세요.

추가 리소스