ASP.NET Core Blazor 정적 파일

참고 항목

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

Important

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

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

이 문서에서는 Blazor 정적 파일을 제공하기 위한 앱 구성에 대해 설명합니다.

Blazor 프레임워크 정적 파일

.NET 8 Blazor 이전 릴리스에서는 스크립트와 같은 Blazor 프레임워크 정적 파일이 정적 파일 미들웨어를 통해 제공됩니다. .NET 8 이상 Blazor 에서는 프레임워크 정적 파일이 엔드포인트 라우팅을 사용하여 매핑되고 정적 파일 미들웨어는 더 이상 사용되지 않습니다.

정적 웹 자산 프로젝트 모드

이 섹션은 .Client 웹앱의 Blazor 프로젝트에 적용됩니다.

웹앱 프로젝트의 필수 <StaticWebAssetProjectMode>Default</StaticWebAssetProjectMode> 설정 .Client 은 프로젝트가 호스트된 프로젝트의 Blazor 일부로 작동하도록 정적 자산 동작을 기본값으로 다시 되돌리기Blazor WebAssembly. SDK(Microsoft.NET.Sdk.BlazorWebAssembly)는 Blazor WebAssembly 서버가 라이브러리의 출력을 단순히 사용하는 "독립 실행형" 모드에서 작동하도록 특정 방식으로 정적 웹 자산을 구성합니다. 이는 웹앱에 Blazor 적합하지 않습니다. 여기서 앱의 WebAssembly 부분은 호스트의 논리적 부분이며 라이브러리처럼 동작해야 합니다. 예를 들어 프로젝트는 스타일 번들(예: BlazorSample.Client.styles.css)을 노출하지 않고 대신 호스트에 프로젝트 번들만 제공하므로 호스트가 자체 스타일 번들에 포함할 수 있습니다.

프로젝트에서 속성의 값(Default)을 변경하거나 제거하는 것은 지원되지 않습니다.<StaticWebAssetProjectMode>.Client

정적 파일 미들웨어

이 섹션은 서버 쪽 Blazor 앱에 적용됩니다.

앱의 요청 처리 파이프라인에서 UseStaticFiles를 호출하여 정적 자산을 클라이언트에 제공하도록 정적 파일 미들웨어를 구성합니다. 자세한 내용은 ASP.NET Core의 정적 파일을 참조하세요.

Development 환경의 정적 파일

이 섹션은 서버 쪽 정적 파일에 적용됩니다.

로컬로 앱을 실행하는 경우 정적 웹 자산은 환경에서 기본적으로 Development 만 사용하도록 설정됩니다. 로컬 개발 및 테스트(예: )가 아닌 Development 환경에 정적 파일을 사용하도록 설정하려면 파일에서 호출 UseStaticWebAssetsWebApplicationBuilder 합니다Program. Staging

Warning

프로덕션 환경에서 호출되는 경우 프로젝트가 아닌 디스크의 별도 위치에서 파일을 제공하므로 프로덕션 환경에서 기능을 활성화하지 않도록 정확한 환경을 호출 UseStaticWebAssets 합니다. 이 섹션의 예제에서는 IsStaging을 호출하여 Staging 환경을 확인합니다.

if (builder.Environment.IsStaging())
{
    builder.WebHost.UseStaticWebAssets();
}

자산의 Blazor WebAssembly 접두사

이 섹션은 Web Apps에 Blazor 적용됩니다.

WebAssemblyComponentsEndpointOptions.PathPrefix 엔드포인트 옵션을 사용하여 자산의 접두사를 나타내는 경로 문자열을 Blazor WebAssembly 설정합니다. 경로는 참조된 Blazor WebAssembly 애플리케이션 프로젝트에 해당해야 합니다.

endpoints.MapRazorComponents<App>()
    .AddInteractiveWebAssemblyRenderMode(options => 
        options.PathPrefix = "{PATH PREFIX}");

앞의 예제 {PATH PREFIX} 에서 자리 표시자는 경로 접두사이며 슬래시(/)로 시작해야 합니다.

다음 예제에서 경로 접두사는 다음으로 /path-prefix설정됩니다.

endpoints.MapRazorComponents<App>()
    .AddInteractiveWebAssemblyRenderMode(options => 
        options.PathPrefix = "/path-prefix");

정적 웹 자산 기본 경로

이 섹션은 독립 실행형 Blazor WebAssembly 앱에 적용됩니다.

기본적으로 앱을 게시하면 게시된 출력의 루트 경로(/)에 프레임워크 파일(_framework폴더 자산)을 포함한 Blazor 앱의 정적 자산이 배치됩니다. 프로젝트 파일(.csproj)에 지정된 <StaticWebAssetBasePath> 속성은 기본 경로를 루트 이외의 경로로 설정합니다.

<PropertyGroup>
  <StaticWebAssetBasePath>{PATH}</StaticWebAssetBasePath>
</PropertyGroup>

앞의 예제에서 {PATH} 자리 표시자는 경로입니다.

속성을 설정 <StaticWebAssetBasePath> 하지 않으면 독립 실행형 앱이 .에 /BlazorStandaloneSample/bin/Release/{TFM}/publish/wwwroot/게시됩니다.

앞의 예제 {TFM} 에서 자리 표시자는 TFM(대상 프레임워크 모니커)입니다(예: net6.0).

독립 실행형 앱의 <StaticWebAssetBasePath> 속성이 게시된 정적 자산 경로를 app1설정하면 게시된 출력의 앱에 대한 루트 경로가 있습니다/app1.Blazor WebAssembly

독립 실행형 Blazor WebAssembly 앱의 프로젝트 파일(.csproj):

<PropertyGroup>
  <StaticWebAssetBasePath>app1</StaticWebAssetBasePath>
</PropertyGroup>

게시된 출력에서 독립 실행형 Blazor WebAssembly 앱의 경로는 .입니다 /BlazorStandaloneSample/bin/Release/{TFM}/publish/wwwroot/app1/.

앞의 예제 {TFM} 에서 자리 표시자는 TFM(대상 프레임워크 모니커)입니다(예: net6.0).

이 섹션은 독립 실행형 Blazor WebAssembly 앱 및 호스팅된 Blazor WebAssembly 솔루션에 적용됩니다.

기본적으로 앱을 게시하면 게시된 출력의 루트 경로(/)에 프레임워크 파일(_framework폴더 자산)을 포함한 Blazor 앱의 정적 자산이 배치됩니다. 프로젝트 파일(.csproj)에 지정된 <StaticWebAssetBasePath> 속성은 기본 경로를 루트 이외의 경로로 설정합니다.

<PropertyGroup>
  <StaticWebAssetBasePath>{PATH}</StaticWebAssetBasePath>
</PropertyGroup>

앞의 예제에서 {PATH} 자리 표시자는 경로입니다.

<StaticWebAssetBasePath> 속성을 설정하지 않으면 호스트된 솔루션의 클라이언트 앱 또는 독립 실행형 앱이 다음 경로에 게시됩니다.

  • 호스팅된 Blazor WebAssembly 솔루션의 Server 프로젝트: /BlazorHostedSample/Server/bin/Release/{TFM}/publish/wwwroot/
  • 독립 실행형 Blazor WebAssembly 앱: /BlazorStandaloneSample/bin/Release/{TFM}/publish/wwwroot/

호스팅된 Blazor WebAssembly 앱 또는 독립 실행형 Blazor WebAssembly 앱의 Client 프로젝트에 있는 <StaticWebAssetBasePath> 속성이 게시된 정적 자산 경로를 app1으로 설정하는 경우 게시된 출력에서 앱에 대한 루트 경로가 /app1입니다.

Client 앱의 프로젝트 파일(.csproj) 또는 독립 실행형 Blazor WebAssembly 앱의 프로젝트 파일(.csproj):

<PropertyGroup>
  <StaticWebAssetBasePath>app1</StaticWebAssetBasePath>
</PropertyGroup>

게시된 출력에서 다음이 적용됩니다.

  • 호스팅된 Blazor WebAssembly 솔루션의 Server 프로젝트에 있는 클라이언트 앱의 경로: /BlazorHostedSample/Server/bin/Release/{TFM}/publish/wwwroot/app1/
  • 독립 실행형 Blazor WebAssembly 앱의 경로: /BlazorStandaloneSample/bin/Release/{TFM}/publish/wwwroot/app1/

<StaticWebAssetBasePath> 속성은 호스트된 단일 배포에서 여러 Blazor WebAssembly 앱의 게시된 정적 자산에 대한 경로를 제어하는 데 가장 일반적으로 사용됩니다. 자세한 내용은 호스트된 여러 ASP.NET Core Blazor WebAssembly 앱을 참조하세요. 이 속성은 독립 실행형 Blazor WebAssembly 앱에도 적용됩니다.

앞의 예제에서 {TFM} 자리 표시자는 TFM(대상 프레임워크 모니커)(예: net6.0)입니다.

파일 매핑 및 정적 파일 옵션

이 섹션은 서버 쪽 정적 파일에 적용됩니다.

FileExtensionContentTypeProvider를 사용하여 추가 파일 매핑을 만들거나 다른 StaticFileOptions를 구성하려면 다음 방법 중 하나를 사용합니다. 다음 예제에서 {EXTENSION} 자리 표시자는 파일 확장명이고 {CONTENT TYPE} 자리 표시자는 콘텐츠 형식입니다. 다음 API의 네임스페이스는 .입니다 Microsoft.AspNetCore.StaticFiles.

  • 다음을 사용하여 StaticFileOptions파일에서 DI(종속성 주입)Program 통해 옵션을 구성합니다.

    var provider = new FileExtensionContentTypeProvider();
    provider.Mappings["{EXTENSION}"] = "{CONTENT TYPE}";
    
    builder.Services.Configure<StaticFileOptions>(options =>
    {
        options.ContentTypeProvider = provider;
    });
    
    app.UseStaticFiles();
    
  • StaticFileOptions 파일에 직접 UseStaticFiles 전달합니다Program.

    var provider = new FileExtensionContentTypeProvider();
    provider.Mappings["{EXTENSION}"] = "{CONTENT TYPE}";
    
    app.UseStaticFiles(new StaticFileOptions { ContentTypeProvider = provider });
    

FileExtensionContentTypeProvider를 사용하여 추가 파일 매핑을 만들거나 다른 StaticFileOptions를 구성하려면 다음 방법 중 하나를 사용합니다. 다음 예제에서 {EXTENSION} 자리 표시자는 파일 확장명이고 {CONTENT TYPE} 자리 표시자는 콘텐츠 형식입니다.

  • 다음을 사용하여 StaticFileOptions파일에서 DI(종속성 주입)Program 통해 옵션을 구성합니다.

    using Microsoft.AspNetCore.StaticFiles;
    
    ...
    
    var provider = new FileExtensionContentTypeProvider();
    provider.Mappings["{EXTENSION}"] = "{CONTENT TYPE}";
    
    builder.Services.Configure<StaticFileOptions>(options =>
    {
        options.ContentTypeProvider = provider;
    });
    

    이 방법은 스크립트를 제공하는 데 사용되는 것과 동일한 파일 공급자를 구성합니다 Blazor . 사용자 지정 구성이 스크립트 제공을 Blazor 방해하지 않는지 확인합니다. 예를 들어 provider.Mappings.Remove(".js")를 통해 공급자를 구성하여 JavaScript 파일에 대한 매핑을 제거하지 마세요.

  • 파일에서 다음 두 개의 호출을 UseStaticFilesProgram 사용합니다.

    • StaticFileOptions를 사용하여 첫 번째 호출에서 사용자 지정 파일 공급자를 구성합니다.
    • 두 번째 미들웨어는 프레임워크에서 Blazor 제공하는 기본 정적 파일 구성을 사용하는 스크립트를 Blazor 제공합니다.
    using Microsoft.AspNetCore.StaticFiles;
    
    ...
    
    var provider = new FileExtensionContentTypeProvider();
    provider.Mappings["{EXTENSION}"] = "{CONTENT TYPE}";
    
    app.UseStaticFiles(new StaticFileOptions { ContentTypeProvider = provider });
    app.UseStaticFiles();
    
  • MapWhen을 사용해 사용자 지정 정적 파일 미들웨어를 실행하여 _framework/blazor.server.js 처리를 방해하지 않게 할 수 있습니다.

    app.MapWhen(ctx => !ctx.Request.Path
        .StartsWithSegments("/_framework/blazor.server.js"),
            subApp => subApp.UseStaticFiles(new StaticFileOptions() { ... }));
    

추가 리소스