ASP.NET Core 기본 개요

Note

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

Warning

이 버전의 ASP.NET Core는 더 이상 지원되지 않습니다. 자세한 내용은 .NET 및 .NET Core 지원 정책을 참조 하세요. 현재 릴리스는 이 문서의 .NET 10 버전을 참조하세요.

이 문서에서는 DI(종속성 주입), 구성 및 미들웨어를 포함하여 ASP.NET Core 앱을 빌드하기 위한 기본 사항을 간략하게 설명합니다.

이 문서의 지침을 추가하거나 대체하는 Blazor 기본 지침은 ASP.NET Core Blazor 기본 사항참조하세요.

Program 파일

프레임워크의 프로젝트 템플릿에서 만든 ASP.NET Core 앱은 파일(Program.cs)에 Program 시작 코드를 포함합니다. Program 파일은 다음과 같습니다.

  • 앱에서 요구하는 서비스가 구성됩니다.
  • 앱의 요청 처리 파이프라인은 일련의 미들웨어 구성 요소로 정의됩니다.

다음 앱 시작 코드는 두 가지 앱 유형을 지원합니다.

// Initialize a new instance of the WebApplicationBuilder class 
// with preconfigured defaults
var builder = WebApplication.CreateBuilder(args);

// Add services for Blazor (Razor components)
builder.Services.AddRazorComponents()
    .AddInteractiveServerComponents();

// Build the app
var app = builder.Build();

// Use exception-handling middleware and HSTS middleware
// when in the Development environment
if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/Error");
    app.UseHsts();
}

app.UseStatusCodePagesWithReExecute("/not-found", createScopeForStatusCodePages: true);

// Use HTTPS redirection middleware to automatically
// redirect requests from HTTP to HTTPS
app.UseHttpsRedirection();

// Map static assets endpoints
app.MapStaticAssets();

// Map a Minimal API endpoint for requests to '/hi'
app.MapGet("/hi", () => "Hello!");

// Add endpoints for Blazor
app.MapRazorComponents<App>()
    .AddInteractiveServerRenderMode();

// Run the app
app.Run();

Note

파일의 Program 추가 구성을 통해 ASP.NET Core 앱은 컨트롤러를 사용하여 Pages, MVCWeb API를 지원할 Razor수 있습니다.

다음 앱 시작 코드는 두 가지 앱 유형을 지원합니다.

// Initialize a new instance of the WebApplicationBuilder class 
// with preconfigured defaults
var builder = WebApplication.CreateBuilder(args);

// Add services for Blazor (Razor components)
builder.Services.AddRazorComponents()
    .AddInteractiveServerComponents();

// Build the app
var app = builder.Build();

// Use exception-handling middleware and HSTS middleware
// when in the Development environment
if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/Error");
    app.UseHsts();
}

app.UseStatusCodePagesWithReExecute("/not-found", createScopeForStatusCodePages: true);

// Use HTTPS redirection middleware to automatically
// redirect requests from HTTP to HTTPS
app.UseHttpsRedirection();

// Add antiforgery middleware
app.UseAntiforgery();

// Map static assets endpoints
app.MapStaticAssets();

// Map a Minimal API endpoint for requests to '/hi'
app.MapGet("/hi", () => "Hello!");

// Add endpoints for Blazor
app.MapRazorComponents<App>()
    .AddInteractiveServerRenderMode();

// Run the app
app.Run();

Note

파일의 Program 추가 구성을 통해 ASP.NET Core 앱은 컨트롤러를 사용하여 Pages, MVCWeb API를 지원할 Razor수 있습니다.

다음 앱 시작 코드는 여러 앱 유형을 지원합니다.

// Initialize a new instance of the WebApplicationBuilder class 
// with preconfigured defaults
var builder = WebApplication.CreateBuilder(args);

// Add services for Blazor (Razor components), Razor Pages, and MVC
builder.Services.AddRazorComponents()
    .AddInteractiveServerComponents();
builder.Services.AddRazorPages();
builder.Services.AddControllersWithViews();

// Build the app
var app = builder.Build();

// Configure the HTTP request pipeline

// Use exception-handling middleware and HSTS middleware
// when in the Development environment
if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/Error");
    app.UseHsts();
}

// Use HTTPS redirection middleware to automatically
// redirect requests from HTTP to HTTPS
app.UseHttpsRedirection();

// Use static files middleware to serve static assets
app.UseStaticFiles();

// Use authorization middleware
app.UseAuthorization();

// Add antiforgery middleware
app.UseAntiforgery();

// Map a Minimal API endpoint for requests to '/hi'
app.MapGet("/hi", () => "Hello!");

// Configures the standard conventional route for MVC
app.MapDefaultControllerRoute();

// Add endpoints for Razor Pages
app.MapRazorPages();

// Add endpoints for Blazor
app.MapRazorComponents<App>()
    .AddInteractiveServerRenderMode();

// Run the app
app.Run();

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

// Initialize a new instance of the WebApplicationBuilder class 
// with preconfigured defaults
var builder = WebApplication.CreateBuilder(args);

// Add services for Razor Pages and MVC
builder.Services.AddRazorPages();
builder.Services.AddControllersWithViews();

// Build the app
var app = builder.Build();

// Configure the HTTP request pipeline

// Use exception-handling middleware and HSTS middleware
// when in the Development environment
if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/Error");
    app.UseHsts();
}

// Use HTTPS redirection middleware to automatically
// redirect requests from HTTP to HTTPS
app.UseHttpsRedirection();

// Use static files middleware to serve static assets
app.UseStaticFiles();

// Use authorization middleware
app.UseAuthorization();

// Map a Minimal API endpoint for requests to '/hi'
app.MapGet("/hi", () => "Hello!");

// Configures the standard conventional route for MVC
app.MapDefaultControllerRoute();

// Add endpoints for Razor Pages
app.MapRazorPages();

// Run the app
app.Run();

Startup 클래스

클래스(Startup.cs)는 Startup 다음과 같습니다.

  • 앱에 필요한 서비스는 ConfigureServices 메서드에서 구성됩니다.
  • 앱의 요청 처리 파이프라인은 메서드에서 Configure 일련의 미들웨어 구성 요소로 정의됩니다.

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

public class Startup
{
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddDbContext<RazorPagesMovieContext>(options =>
            options.UseSqlServer(Configuration.GetConnectionString("RazorPagesMovieContext")));

        services.AddControllersWithViews();
        services.AddRazorPages();
    }

    public void Configure(IApplicationBuilder app)
    {
        app.UseHttpsRedirection();
        app.UseStaticFiles();

        app.UseRouting();

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

자세한 내용은 Blazor 및 ASP.NET Core 시작을(를) 참조하세요.

종속성 주입(서비스)

ASP.NET Core에는 기본 제공 종속성 주입(DI) 기능이 있어 앱 전체에서 구성된 서비스를 제어의 역전(IoC)을 위해 사용할 수 있습니다.

호출을 통해 인스턴스화되면 구성 및 로깅에 대한 서비스와 같은 프레임워크 제공 서비스가 자동으로 추가됩니다.WebApplication.CreateBuilderWebApplicationBuilder

var builder = WebApplication.CreateBuilder(args);

추가 서비스는 .를 사용하여 DI 컨테이너 WebApplicationBuilder.Services에 추가됩니다. 다음 예제에서는 Blazor 서비스를 등록합니다.

builder.Services.AddRazorComponents()
    .AddInteractiveServerComponents();
builder.Services.AddServerSideBlazor();

DI 프레임워크는 런타임에 요청된 서비스의 인스턴스를 제공합니다. Blazor 앱에서는 서비스가 @inject 파일(.razor)에서 Razor 지시문을 사용하여 런타임에 DI에서 확인되는 경우가 많습니다. 다음 예제에서 구성 요소는 추상화를 사용하여 NavigationManager URI 탐색을 쿼리하고 관리하는 데 사용되는 탐색 관리자의 인스턴스를 가져와서 단추를 선택할 때 사용자를 제품 /products 페이지로 이동합니다.

@inject NavigationManager Navigation

<button @onclick="NavigateToProductList">
    Products
</button>

@code {
    private void NavigateToProductList()
    {
        Navigation.NavigateTo("/products");
    }
}

DI에서 서비스를 확인하는 또 다른 방법은 생성자 주입을 사용하는 것입니다. 다음 예제에서 기본 생성자(C# 12 이상) 는 형식 AppDbContextILogger<OrderProcessor> 의 매개 변수를 가져와 런타임 contextlogger 에 변수(데이터베이스 인스턴스 및 로깅 추상화)로 확인합니다. 데이터베이스 컨텍스트 인스턴스는 필드 false 가 데이터베이스에 있는 IsProcessed 모든 주문을 처리하는 데 사용되며 처리된 각 주문은 로거 인스턴스를 사용하여 주문 ID(OrderId)를 사용하여 정보로 기록됩니다.

public class OrderProcessor(AppDbContext context, ILogger<OrderProcessor> logger)
{
    public async Task ProcessPendingOrdersAsync()
    {
        var orders = await context.Orders
            .Where(o => !o.IsProcessed)
            .ToListAsync();

        foreach (var order in orders)
        {
            order.IsProcessed = true;
            logger.LogInformation("Processed order ID {OrderId}.", order.Id);
        }

        await context.SaveChangesAsync();
    }
}

최소 API 엔드포인트의 람다 매개 변수에 종속성을 직접 삽입할 수도 있습니다. 다음 예제에서는 /todos 엔드포인트에서 할 일 항목 목록이 반환됩니다. ILogger<Program>용 로거 인스턴스는 정보를 기록하고, AppDbContext용 데이터베이스 인스턴스는 응답에 포함할 할 일 항목 목록을 데이터베이스에서 가져오는 데 사용됩니다.

app.MapGet("/todos", async (AppDbContext context, ILogger<Program> logger) =>
{
    logger.LogInformation("Fetching todos using inline handler injection.");
    var todos = await context.Todos.ToListAsync();

    return Results.Ok(todos);
});

Host.CreateDefaultBuilder 파일에서 Program 호출되면 구성 및 로깅에 대한 서비스와 같은 프레임워크 제공 서비스를 사용하여 클래스의 HostBuilder 새 인스턴스가 자동으로 초기화됩니다.

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

추가 서비스는 Startup.cs 메서드(Startup.ConfigureServices)에서 DI 컨테이너의 서비스 컬렉션(IServiceCollection)에 추가됩니다. 다음 예제에서는 MVC 및 Razor Pages 서비스를 등록합니다.

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

서비스는 일반적으로 DI에서 생성자 주입을 사용하여 해결됩니다. 생성자 주입에서는 클래스가 필요한 형식 또는 인터페이스의 생성자 매개 변수를 선언합니다. DI 프레임워크는 런타임에 서비스의 인스턴스를 제공합니다.

기본 제공 DI 컨테이너가 요구 사항을 충족하지 않는 경우 타사 IoC 컨테이너를 대신 사용할 수 있습니다.

자세한 내용은 ASP.NET Core 종속성 주입ASP.NET Core Blazor 종속성 주입을 참조하세요.

Environments

실행 환경은 다음과 같은 ASP.NET Core 사용할 수 있습니다.

  • Development: 앱이 로컬 개발 중일 때
  • Staging: 앱이 배포를 위해 준비되는 경우
  • Production: 라이브 앱이 사용자에게 실행 중인 경우

앱이 실행되는 호스트에서 환경 변수를 ASPNETCORE_ENVIRONMENT 설정하여 앱이 실행 중인 환경을 지정합니다. ASP.NET Core 앱 시작 시 환경 변수를 읽고 앱 주위의 코드 실행을 제어하는 값을 저장합니다.

개발자 코드는 지정된 환경을 확인할 수 있습니다. 다음 Program 파일 예제에서 실행 블록에 있는 코드는 앱이 Development 환경에서 실행되지 않을 때에만 실행됩니다:

if (!app.Environment.IsDevelopment())
{
    ...
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    if (!env.IsDevelopment())
    {
        ...
    }

    ...
}

자세한 내용은 ASP.NET Core 런타임 환경ASP.NET Core Blazor 환경을 참조하세요.

Middleware

요청 처리 파이프라인은 일련의 미들웨어 구성 요소로 구성됩니다. 각 구성 요소는 HttpContext에 대해 작업을 수행한 후 파이프라인에 있는 다음 미들웨어를 호출하거나 요청을 종료합니다.

규칙에 따라 미들웨어 구성 요소는 "Use"로 시작하는 확장 메서드를 호출하여 파이프라인에 추가됩니다. 요청 처리 파이프라인의 일부를 나타내는 다음 예제에서는 예외 처리를 위한 미들웨어(), HSTS(UseExceptionHandlerHTTP Strict Transport Security) 프로토콜(UseHsts) 및 HTTPS 리디렉션()이UseHttpsRedirection 호출됩니다. 두 미들웨어는 앱이 Staging 환경에서 로컬 개발 중이 아닐 때에만 실행됩니다. 예를 들어 앱이 배포 전 스테이징된 상태인 Production 환경이나 프로덕션 Development 환경에 있을 때만 실행됩니다:

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

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

app.UseHttpsRedirection();

ASP.NET Core는 풍부한 일련의 기본 제공 미들웨어를 포함합니다. 또한 앱의 특수 요청 처리 사양을 충족하는 사용자 지정 미들웨어 구성 요소를 만들 수도 있습니다. 자세한 내용은 ASP.NET Core 미들웨어를 참조하세요.

Host

시작 시 ASP.NET Core 앱이 호스트를 빌드합니다. 호스트는 다음과 같은 앱의 리소스를 모두 캡슐화합니다.

  • HTTP 서버 구현
  • 미들웨어 구성 요소
  • Logging
  • DI(종속성 주입) 서비스
  • Configuration

ASP.NET Core 앱을 실행할 수 있는 세 가지 호스트가 있습니다.

ASP.NET Core WebApplicationWebApplicationBuilder 형식이 권장되며 모든 ASP.NET Core 프로젝트 템플릿에서 사용됩니다. WebApplication .NET 제네릭 호스트와 유사하게 동작하며 동일한 인터페이스를 많이 노출하지만 구성하려면 더 적은 콜백이 필요합니다. ASP.NET Core WebHost 이전 버전과의 호환성을 위해서만 사용할 수 있습니다.

다음 예제에서는 WebApplication 인스턴스화하고 app변수에 할당합니다.

var builder = WebApplication.CreateBuilder(args);

...

var app = builder.Build();

이 메서드는 WebApplicationBuilder.Build 다음과 같은 기본 옵션 집합으로 호스트를 구성합니다.

  • 웹 서버로 사용하고 Kestrel IIS 통합을 사용하도록 설정합니다.
  • 앱 설정 파일(예appsettings.json: 환경 변수, 명령줄 인수 및 기타 구성 원본)에서 구성을 로드합니다.
  • 로깅을 설정하고 로깅 출력을 콘솔 및 디버그 로깅 공급자로 전달합니다.

두 개의 호스트가 있습니다.

.NET 일반 호스트를 사용하는 것이 좋습니다. ASP.NET Core 웹 호스트는 이전 버전과의 호환성에서만 사용할 수 있습니다.

다음 예제의 메서드 및 ConfigureWebHostDefaults 메서드는 CreateDefaultBuilder 다음과 같은 기본 옵션 집합을 사용하여 호스트를 구성합니다.

  • 웹 서버로 사용하고 Kestrel IIS 통합을 사용하도록 설정합니다.
  • 앱 설정 파일(예appsettings.json: 환경 변수, 명령줄 인수 및 기타 구성 원본)에서 구성을 로드합니다.
  • 로깅을 설정하고 로깅 출력을 콘솔 및 디버그 로깅 공급자로 전달합니다.
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>();
            });
}

자세한 내용은 다음 리소스를 참조하세요.

웹이 아닌 시나리오

제네릭 호스트를 사용하면 다른 유형의 앱에서 로깅, DI(종속성 주입), 구성 및 앱 수명 관리와 같은 교차 커팅 프레임워크 확장을 사용할 수 있습니다. 자세한 내용은 ASP.NET Core의 .NET 제네릭 호스트ASP.NET Core에서 호스트되는 서비스를 사용하는 백그라운드 작업을 참조하세요.

Servers

ASP.NET Core 앱은 HTTP 요청을 수신하기 위해 HTTP 서버 구현을 사용합니다. 서버는 앱에 대한 요청을 요청 기능으로 구성된 집합으로 노출합니다.

자세한 내용은 ASP.NET Core의 웹 서버 구현을 참조하세요.

Windows

ASP.NET Core는 다음과 같은 서버 구현을 제공합니다.

  • Kestrel은 플랫폼 간 웹 서버입니다. Kestrel 는 IIS를 사용하여 역방향 프록시 구성에서 실행되는 경우가 많습니다. ASP.NET Core 2.0 이상에서 Kestrel은 인터넷에 직접 노출되는 공용 에지 서버로 실행할 수 있습니다.
  • ‘IIS HTTP 서버’는 IIS를 사용하는 Windows용 서버입니다. 이 서버를 사용하면 ASP.NET Core 앱 및 IIS는 동일한 프로세스에서 실행됩니다.
  • HTTP.sys IIS와 함께 사용되지 않는 Windows용 서버입니다.

macOS 및 Linux

ASP.NET Core는 Kestrel 플랫폼 간 서버 구현을 제공합니다. ASP.NET Core 2.0 이상에서 Kestrel은 인터넷에 직접 노출되는 공용 에지 서버로 실행할 수 있습니다. Kestrel 는 Nginx 또는 Apache를 사용하여 역방향 프록시 구성에서 실행되는 경우가 많습니다.

Configuration

ASP.NET Core 정렬된 구성 공급자 집합에서 이름-값 쌍으로 설정을 가져오는 구성 프레임워크를 제공합니다. 기본 제공 구성 공급자는 JSON 파일(), XML.xml 파일(.json), 환경 변수 및 명령줄 인수와 같은 다양한 원본에 사용할 수 있습니다. 다른 원본을 지원하는 사용자 지정 구성 공급자를 만들 수 있습니다.

기본적으로 ASP.NET Core 앱은 앱 설정 파일(예appsettings.json: 환경 변수 및 명령줄)에서 읽도록 구성됩니다.

앱의 구성이 로드되면 환경 변수의 값이 앱 설정 파일의 값을 재정의합니다. Options API는 관련 구성 값을 읽을 수 있습니다.

환경에서 암호 Development 와 같은 기밀 구성 데이터를 관리하기 위해 .NET은 비밀 관리자를 제공합니다. 프로덕션 비밀의 경우 Azure Key Vault 사용하는 것이 좋습니다.

자세한 내용은 다음 리소스를 참조하세요.

Logging

ASP.NET Core 다양한 로깅 공급자와 함께 작동하는 로깅 API를 지원합니다.

  • Console
  • Debug
  • Windows 이벤트 추적
  • Windows 이벤트 로그
  • TraceSource
  • Azure App Service
  • Azure 애플리케이션 Insights
  • 타사 공급자

로그를 생성하려면 종속성 주입(DI)에서 ILogger<TCategoryName> 서비스를 가져와 LogInformation와 같은 로깅 메서드를 호출합니다. 로거 개체 및 로거 개체에 대한 콘솔 공급자는 메서드가 호출될 때 DI 컨테이너에 WebApplication.CreateBuilder 자동으로 저장됩니다.

다음 예제에서는 DI에서 로깅 인스턴스를 가져와 날씨 데이터를 보고하는 앱의 Blazor 구성 요소(Weather.razor)에서 Weather 사용하는 방법을 보여 줍니다.

@inject ILogger<Weather> Logger

...

@code {
    protected override async Task OnInitializedAsync()
    {
        Logger.LogInformation("OnInitializedAsync method called!");

        ...
    }
}

Razor Pages 및 MVC 앱에 대한 라우팅 지침을 비롯한 자세한 내용은 .NET 및 ASP.NET Core의 로깅ASP.NET Core Blazor 로깅을 참조하세요.

Routing

ASP.NET Core 라우팅은 들어오는 요청을 앱의 특정 엔드포인트에 매핑하는 메커니즘입니다. 이를 통해 Razor 구성 요소, Razor 페이지, MVC 컨트롤러 작업 또는 미들웨어와 같은 다양한 구성 요소에 해당하는 URL 패턴을 정의할 수 있습니다.

UseRouting 메서드는 요청 파이프라인에 라우팅 미들웨어를 추가합니다. 이 미들웨어는 라우팅 정보를 처리하고 각 요청에 대한 적절한 엔드포인트를 결정합니다. 최소 호스트UseRouting를 사용하는 앱에서는 미들웨어 처리 순서를 변경하려는 경우가 아니면 개발자 코드에서 명시적으로 호출되지 않습니다.

자세한 내용은 다음 리소스를 참조하세요.

오류를 처리하십시오.

ASP.NET Core에는 다음과 같은 오류를 처리하기 위한 기본 제공 기능이 포함됩니다.

  • 개발자 예외 페이지
  • 사용자 지정 오류 페이지
  • 정적 상태 코드 페이지
  • 시작 예외 처리

자세한 내용은 ASP.NET Core 오류 처리 및 ASP.NET Core앱의 Blazor 오류 처리를 참조하세요.

HTTP 요청하기

IHttpClientFactory 인스턴스를 만들기 위해 HttpClient를 구현할 수 있습니다. 팩터리는 다음과 같습니다.

  • 논리적 HttpClient 인스턴스를 구성하고 이름을 지정하기 위한 중앙 위치를 제공합니다. 예를 들어 웹 API를 사용하여 대부분의 앱 데이터 요청에 대해 기본 클라이언트를 사용하고 GitHub 액세스하기 위해 구성된 다른 클라이언트를 등록합니다.
  • 여러 위임 처리기를 등록하고 연결하여 송신 요청 미들웨어 파이프라인을 구축하도록 지원합니다. 이 패턴은 ASP.NET Core의 인바운드 미들웨어 파이프라인과 비슷합니다. 이 패턴은 캐싱, 오류 처리, serialization 및 로깅을 포함한 HTTP 요청 관련 횡단 문제를 관리하기 위한 메커니즘을 제공합니다.
  • 일시적인 오류 처리를 위한 인기 있는 타사 라이브러리인 Polly와 통합됩니다.
  • HttpClientHandler 수명을 수동으로 관리할 때 발생하는 일반적인 DNS 문제를 피하기 위해 기본 HttpClient 인스턴스의 풀링 및 수명을 관리합니다.
  • 팩터리에서 만든 클라이언트를 통해 전송된 모든 요청에 대해 ILogger를 통해 구성 가능한 로깅 환경을 추가합니다.

자세한 내용은 IHttpClientFactory - ASP.NET Core 및 ASP.NET Core앱에서 Blazor 웹 API 호출을 사용하여 HTTP 요청을 참조하세요.

콘텐츠 루트

콘텐츠 루트는 다음의 기본 경로입니다.

  • 앱(.exe)을 호스팅하는 실행 파일입니다.
  • 앱(.dll)을 구성하는 컴파일된 어셈블리입니다.
  • 앱에서 사용하는 콘텐츠 파일로는 .cshtml 파일(.xml, .json), 구성 파일(Razor, .db), 데이터 파일(.razor) 등이 있습니다.
  • 일반적으로 wwwroot 폴더인 웹 루트입니다.

개발 중에는 콘텐츠 루트가 기본적으로 프로젝트의 루트 디렉터리로 설정됩니다. 이 디렉터리도 앱의 콘텐츠 파일과 웹 루트의 기본 경로입니다. 호스트를 빌드할 때 경로를 설정하여 다른 콘텐츠 루트를 지정합니다.

자세한 내용은 ASP.NET Core .NET 일반 호스트를 참조하고 ASP.NET Core 앱에서 정적 파일을 제공합니다.

웹 루트

웹 루트는 스타일시트, JavaScript 파일 및 이미지와 같은 공용 정적 리소스 파일의 기본 경로입니다.

기본적으로 정적 파일은 웹 루트 디렉터리 및 하위 디렉터리에서만 제공됩니다. 웹 루트 경로의 기본값은 {CONTENT ROOT}/wwwroot이며, {CONTENT ROOT} 자리 표시자는 콘텐츠 루트입니다. 호스트를 빌드할 때는 경로를 설정하여 다른 웹 루트를 지정하세요. 앱 프로젝트 파일에서 <Content> 프로젝트 항목을 사용하여 wwwroot의 파일이 게시되지 않도록 할 수도 있습니다.

Razor .cshtml 파일에서는 ~/가 웹 루트를 가리킵니다. 시작 ~/ 경로는 가상 경로라고 합니다.

자세한 내용은 ASP.NET Core .NET 일반 호스트를 참조하고 ASP.NET Core 앱에서 정적 파일을 제공합니다.

샘플 다운로드 방법

대부분의 문서 및 자습서에는 예제 코드에 대한 링크가 포함되어 있습니다.

  1. ASP.NET 리포지토리 zip 파일을 다운로드합니다.
  2. AspNetCore.Docs-main.zip 파일의 압축을 풉니다.
  3. 압축을 푼 리포지토리의 문서 샘플 앱에 액세스하려면 문서 샘플 링크의 URL을 사용하여 샘플 폴더로 이동합니다. 일반적으로 문서 샘플 링크는 ‘샘플 코드 보기 또는 다운로드’라는 링크 텍스트가 포함되어 문서 맨 위에 표시됩니다.

단일 샘플 앱과 해당 앱의 마지막 커밋만 가져오려면 git sparse-checkout를 사용하세요.

샘플 GitHub 리포지토리에 대한Blazor 다음 예제에서 명령은 샘플 폴더의 경로를 지정합니다.git sparse-checkout set

  • {VERSION FOLDER} 자리 표시자를 버전 폴더로 바꿉다.
  • {SAMPLE FOLDER} 자리 표시자를 샘플 폴더로 바꿉다.

명령 셸에서 샘플을 복제할 폴더로 이동합니다. 명령 셸에서 다음 명령을 실행하여 버전/샘플 폴더 경로를 git sparse-checkout set 명령에 전달합니다.

git clone --depth 1 --filter=blob:none https://github.com/dotnet/blazor-samples.git --sparse
cd blazor-samples
git sparse-checkout init --cone
git sparse-checkout set {VERSION FOLDER}/{SAMPLE FOLDER}

다음 PowerShell 예제에서는 10.0 Blazor Web App 샘플을 가져와서 디렉터리cd 변경 명령에 대한 PowerShell ~/documents 경로를 사용하여 사용자의 문서 폴더에 배치합니다.

cd "~/documents"
git clone --depth 1 --filter=blob:none https://github.com/dotnet/blazor-samples.git --sparse
cd blazor-samples
git sparse-checkout init --cone
git sparse-checkout set 10.0/BlazorSample_BlazorWebApp

샘플 코드의 전처리기 지시문

다양한 시나리오를 보여주기 위해 예제 앱은 #define#if-#else/#elif-#endif 전처리기 지시문을 사용하여 예제 코드의 서로 다른 섹션을 선택적으로 컴파일하고 실행합니다. 이 방법을 사용하는 예제의 경우 C# 파일 상단에 위치한 #define 지시문을 설정하여 실행할 시나리오와 연결된 기호를 정의합니다. 일부 예제는 시나리오를 실행하기 위해 여러 파일의 맨 상단에 기호를 정의해야 합니다.

예를 들어, 다음 #define 기호 목록은 네 가지 시나리오를 사용할 수 있음을 나타냅니다(기호당 하나의 시나리오). 현재 예제 구성에서는 TemplateCode 시나리오를 실행합니다.

#define TemplateCode // or LogFromMain or ExpandDefault or FilterInCode

ExpandDefault 시나리오를 실행하도록 예제를 변경하려면 ExpandDefault 기호를 정의하고 나머지 기호는 주석으로 처리하세요.

#define ExpandDefault // TemplateCode or LogFromMain or FilterInCode

C# 전처리기 지시문을 사용하여 코드 섹션을 선택적으로 컴파일하는 방법에 대한 자세한 내용은 #define(C# 참조)#if(C# 참조)를 참조하세요.

샘플 코드의 지역

일부 샘플 앱에는 #region#endregion C # 지시문으로 둘러싸인 코드 섹션이 포함되어 있습니다. 설명서 빌드 시스템은 이러한 지역을 렌더링된 설명서 항목에 삽입합니다.

지역 이름에는 일반적으로 "스니펫"이라는 단어가 포함됩니다. 다음 예제에서는 이름이 snippet_WebHostDefaults이라는 지역을 보여줍니다.

#region snippet_WebHostDefaults
Host.CreateDefaultBuilder(args)
    .ConfigureWebHostDefaults(webBuilder =>
    {
        webBuilder.UseStartup<Startup>();
    });
#endregion

위의 C# 코드 조각은 다음 줄을 사용하여 토픽의 markdown 파일에서 참조됩니다.

[!code-csharp[](sample/SampleApp/Program.cs?name=snippet_WebHostDefaults)]

코드를 둘러싸고 있는 #region#endregion 지시문을 무시하거나 제거할 수 있습니다. 항목에 설명된 샘플 시나리오를 실행하려는 경우 이러한 지시문 내의 코드를 변경하지 마세요.

자세한 내용은 ASP.NET 설명서인 코드 조각에 기여를 참조하세요.

DOM(문서 개체 모델)

이 설명서 집합 전체에서 문서 개체 모델에 대한 참조는 약어 DOM을 사용합니다.

자세한 내용은 DOM(MDN 설명서)수준 1 W3C(문서 개체 모델 사양) 소개를 참조하세요.

바이트 배수

.NET 바이트 크기는 1024의 파워에 따라 10진수가 아닌 바이트 배수에 메트릭 접두사를 사용합니다.

이름(약어) 크기 예시
킬로바이트(KB) 1,024바이트 1KB = 1,024바이트
메가바이트(MB) 1,0242 바이트 1MB = 1,048,576바이트
기가바이트(GB) 1,0243 바이트 1GB = 1,073,741,824바이트

지원 요청

문서 관련 문제만 dotnet/AspNetCore.Docs 리포지토리에 적합합니다. 제품 지원의 경우 설명서 문제를 열지 마세요. 다음 지원 채널 중 하나 이상을 통해 지원을 요청합니다.

프레임워크 또는 제품 피드백의 잠재적인 버그를 보려면 dotnet/aspnetcore 문제에서 ASP.NET Core 제품 단위에 대한 문제를 엽니다. 일반적으로 버그 보고서에는 다음이 필요합니다.

  • 문제에 대한 자세한 설명: 문제를 열 때 제품 단위에서 제공하는 GitHub 문제 템플릿의 지침을 따릅니다.
  • 최소 재현 프로젝트: 제품 단위 엔지니어가 다운로드하고 실행할 수 있도록 프로젝트를 GitHub에 올려주세요. 프로젝트를 이슈의 초기 댓글에 연결합니다.

아티클에 문제가 발생할 수 있는 경우 설명서 문제를 엽니다. 설명서 문제를 열려면 문서 맨 아래에 있는 설명서 문제 열기 피드백 링크를 사용합니다. 문제에 추가된 메타데이터는 추적 데이터를 제공하고 문서의 작성자를 자동으로 ping합니다. 설명서 문제를 열기 전에 제품 단위와 주제가 논의된 경우 문서 문제의 오프닝 주석에 엔지니어링 문제에 대한 교차 링크를 배치합니다.

Blazor 설명서에 대한 GitHub 문제는 Blazor.Docs 프로젝트(dotnet/AspNetCore.Docs GitHub 리포지토리) 심사를 위해 자동으로 표시됩니다. 특히 주말과 휴일에는 응답을 위해 잠시 기다려 주세요. 대체로 문서 작성자는 평일 24시간 이내에 응답합니다.

Visual Studio의 문제나 피드백이 있으면, Visual Studio 내부에서 문제 보고 또는 기능 제안 제스처를 사용하여 해당 문제를 열 수 있습니다. 자세한 내용은 Visual Studio 피드백을 참조하세요.

Visual Studio Code 관련 문제는 커뮤니티 지원 포럼에서 지원을 요청하세요. 버그 보고서 및 제품 피드백의 경우 GitHub 리포지토리에서microsoft/vscode 문제를 엽니다.

추가 리소스