.NET 7의 ASP.NET Core에서 .NET 8로 마이그레이션
이 문서에서는 기존 ASP.NET Core 7.0 프로젝트를 ASP.NET Core 8.0으로 업데이트하는 방법을 설명합니다.
필수 조건
ASP.NET 및 웹 개발 워크로드가 있는 Visual Studio 2022
에서 .NET SDK 버전 업데이트 global.json
특정 .NET Core SDK 버전을 대상으로 하는 파일을 사용하는 global.json
경우 설치된 .NET 8.0 SDK 버전으로 속성을 업데이트 version
합니다. 예시:
{
"sdk": {
- "version": "7.0.100"
+ "version": "8.0.100"
}
}
대상 프레임워크 업데이트
프로젝트 파일의 TFM(대상 프레임워크 모니커)을 net8.0
으로 업데이트합니다.
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
- <TargetFramework>net7.0</TargetFramework>
+ <TargetFramework>net8.0</TargetFramework>
</PropertyGroup>
</Project>
패키지 참조 업데이트
프로젝트 파일에서 각 Microsoft.AspNetCore.*
, Microsoft.EntityFrameworkCore.*
및 System.Net.Http.Json
Microsoft.Extensions.*
패키지 참조의 Version
특성을 8.00 이상으로 업데이트합니다. 예시:
<ItemGroup>
- <PackageReference Include="Microsoft.AspNetCore.JsonPatch" Version="7.0.12" />
- <PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="7.0.12" />
- <PackageReference Include="Microsoft.Extensions.Caching.Abstractions" Version="7.0.0" />
- <PackageReference Include="System.Net.Http.Json" Version="7.0.1" />
+ <PackageReference Include="Microsoft.AspNetCore.JsonPatch" Version="8.0.0" />
+ <PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="8.0.0" />
+ <PackageReference Include="Microsoft.Extensions.Caching.Abstractions" Version="8.0.0" />
+ <PackageReference Include="System.Net.Http.Json" Version="8.0.0" />
</ItemGroup>
Blazor
다음 마이그레이션 시나리오를 다룹니다.
- Blazor Server 앱 업데이트
- 모든 Blazor 웹앱 규칙 채택
- Blazor Server 앱을 웹앱으로 Blazor 변환
- Blazor WebAssembly 앱 업데이트
- 호스트 Blazor WebAssembly 된 앱을 웹앱으로 Blazor 변환
- 서비스 및 엔드포인트 옵션 구성 업데이트
- Yarp 라우팅을 사용한 삭제 Blazor Server 해결 방법
- 레이아웃 구성 요소의 구성 요소 마이그레이션
CascadingValue
- MSBuild 속성 마이그레이션
BlazorEnableCompression
- 구성 요소를 연계 인증 상태 서비스로 마이그레이션
<CascadingAuthenticationState>
- 새 문서: 마이그레이션 중 HTTP 캐싱 문제
- 새 문서: 정적 서버 쪽 렌더링(정적 SSR)이 있는 클래스 라이브러리에 대한 새 문서
- 추가 어셈블리에서 구성 요소 검색
- 쿼리 문자열에서 매개 변수를 제공할 때 특성 삭제
[Parameter]
- Blazor Server 스크립트 대체 정책 권한 부여
ASP.NET Core 앱에 지원을 추가하는 Blazor 방법에 대한 지침은 ASP.NET Core Razor 구성 요소를 ASP.NET Core 앱에 통합을 참조하세요.
Blazor Server 앱 업데이트
.NET 8에서 Web Apps를 사용하는 Blazor 것이 좋지만 Blazor Server 지원됩니다. .NET 8에서 계속 사용 Blazor Server 하려면 이 문서의 처음 세 섹션에 있는 지침을 따릅니다.
Web Apps에 Blazor 도입된 새로운 Blazor 기능은 .NET 8에서 실행되도록 업데이트된 앱에서 사용할 수 Blazor Server 없습니다. 새 .NET 8 Blazor 기능을 채택하려는 경우 다음 섹션 중 하나의 지침을 따르세요.
모든 Blazor 웹앱 규칙 채택
필요에 따라 모든 새 Blazor 웹앱 규칙을 채택하려면 다음 프로세스를 사용하는 것이 좋습니다.
- 웹앱 프로젝트 템플릿에서 Blazor 새 앱을 만듭니다. 자세한 내용은 ASP.NET Core Blazor 도구를 참조하세요.
- 앱의 구성 요소 및 코드를 새 Blazor 웹앱으로 이동하여 새 기능을 채택하도록 수정합니다.
- 웹앱의 레이아웃 및 스타일을 Blazor 업데이트합니다.
새로운 .NET 8 기능은 ASP.NET Core 8.0의 새로운 기능에서 다룹니다. .NET 6 이하에서 앱을 업데이트하는 경우 중간 릴리스에 대한 마이그레이션 및 릴리스 정보(새로운 문서)를 참조하세요.
Blazor Server 앱을 웹앱으로 Blazor 변환
Blazor Server 앱은 코드 변경 없이 .NET 8에서 지원됩니다. 다음 지침을 사용하여 앱을 해당하는 .NET 8 Blazor 웹앱으로 변환 Blazor Server 하면 모든 새 .NET 8 기능을 사용할 수 있습니다.
Important
이 섹션에서는 .NET 7 Blazor Server 앱을 .NET 8 Blazor 웹앱으로 변환하는 데 필요한 최소한의 변경 사항에 중점을 둡니다. 모든 새 Blazor 웹앱 규칙을 채택하려면 모든 Blazor 웹앱 규칙 채택 섹션의 지침을 따르세요.
이 문서의 처음 세 섹션에 있는 지침을 따릅니다.
구성 요소()의
App
내용을 프로젝트의 루트 폴더에 추가된 새Routes
구성 요소 파일(Routes.razor
)로App.razor
이동합니다. 프로젝트의 루트 폴더에 있는 앱의 빈App.razor
파일을 그대로 둡니다.약식 렌더링 모드를 앱에서
_Imports.razor
사용할 수 있도록 파일에 항목을 추가합니다.@using static Microsoft.AspNetCore.Components.Web.RenderMode
페이지(
Pages/_Host.cshtml
)의_Host
콘텐츠를 빈App.razor
파일로 이동합니다. 구성 요소를 다음과 같은 내용으로 변경합니다App
.참고 항목
다음 예제에서 프로젝트의 네임스페이스는
BlazorServerApp
입니다. 프로젝트와 일치하도록 네임스페이스를 조정합니다.파일 맨 위에서 다음 줄을 제거합니다.
- @page "/" - @using Microsoft.AspNetCore.Components.Web - @namespace BlazorServerApp.Pages - @addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
앞의 줄을 인스턴스를 삽입하는 줄로 IHostEnvironment 바꿉니다.
@inject IHostEnvironment Env
태그에서 타일(
~
)을href
<base>
제거하고 앱의 기본 경로로 바꿉니다.- <base href="~/" /> + <base href="/" />
구성 요소에 대한 구성 요소 태그 도우미를
HeadOutlet
제거하고 구성 요소로HeadOutlet
바꿉다.다음 줄을 제거합니다.
- <component type="typeof(HeadOutlet)" render-mode="ServerPrerendered" />
앞의 줄을 다음으로 바꿉다.
<HeadOutlet @rendermode="InteractiveServer" />
구성 요소에 대한 구성 요소 태그 도우미를
App
제거하고 구성 요소로Routes
바꿉다.다음 줄을 제거합니다.
- <component type="typeof(App)" render-mode="ServerPrerendered" />
앞의 줄을 다음으로 바꿉다.
<Routes @rendermode="InteractiveServer" />
참고 항목
이전 구성에서는 앱의 구성 요소가 대화형 서버 렌더링을 채택한다고 가정합니다. SSR(정적 서버 쪽 렌더링)을 채택하는 방법을 비롯한 자세한 내용은 ASP.NET Core Blazor 렌더링 모드를 참조하세요.
오류 UI에 대한 환경 태그 도우미를 제거하고 다음 Razor 태그로 바꿉 있습니다.
다음 줄을 제거합니다.
- <environment include="Staging,Production"> - An error has occurred. This application may no longer respond until reloaded. - </environment> - <environment include="Development"> - An unhandled exception has occurred. See browser dev tools for details. - </environment>
앞의 줄을 다음으로 바꿉다.
@if (Env.IsDevelopment()) { <text> An unhandled exception has occurred. See browser dev tools for details. </text> } else { <text> An error has occurred. This app may no longer respond until reloaded. </text> }
스크립트를 Blazor 다음으로
blazor.server.js
blazor.web.js
변경합니다.- <script src="_framework/blazor.server.js"></script> + <script src="_framework/blazor.web.js"></script>
Pages/_Host.cshtml
파일을 삭제합니다.다음과 같이
Program.cs
를 업데이트합니다.참고 항목
다음 예제에서 프로젝트의 네임스페이스는
BlazorServerApp
입니다. 프로젝트와 일치하도록 네임스페이스를 조정합니다.using
프로젝트 네임스페이스의 파일 맨 위에 문을 추가합니다.using BlazorServerApp;
을 (
AddServerSideBlazor
을)로AddRazorComponents
바꾸고 연결된 호출로 대체합니다AddInteractiveServerComponents
.다음 줄을 제거합니다.
- builder.Services.AddServerSideBlazor();
이전 줄을 구성 요소 및 대화형 서버 구성 요소 서비스로 Razor 바꿉니다. 호출은
AddRazorComponents
기본적으로 위조 방지 서비스(AddAntiforgery
)를 추가합니다.builder.Services.AddRazorComponents() .AddInteractiveServerComponents();
다음 줄을 제거합니다.
- app.MapBlazorHub();
위의 줄을 호출
MapRazorComponents
로 바꾸고, 구성 요소를 루트 구성 요소 형식으로 제공하고App
, 연결된 호출을 추가합니다AddInteractiveServerRenderMode
.app.MapRazorComponents<App>() .AddInteractiveServerRenderMode();
다음 줄을 제거합니다.
- app.MapFallbackToPage("/_Host");
호출 후 요청 처리 파이프라인에 위조 방지 미들웨어를 추가합니다
app.UseRouting
. 호출app.UseRouting
app.UseEndpoints
이 있는 경우 호출은 해당 호출app.UseAntiforgery
간에 이동해야 합니다. 호출 후app.UseAntiforgery
호출해야app.UseAuthentication
합니다.app.UseAuthorization
앞에서 설명한 대로 자동으로AddRazorComponents
추가되므로 위조 방지 서비스(builder.Services.AddAntiforgery()
)를 추가할 필요가 없습니다.app.UseAntiforgery();
미리 렌더링을 Blazor Server 사용하지 않도록 앱이 구성된 경우 업데이트된 앱에 대한 미리 렌더링을 계속 사용하지 않도록 설정할 수 있습니다. 구성 요소에서
App
및Routes
구성 요소에 대한 지시문 특성에HeadOutlet
@rendermode
Razor 할당된 값을 변경합니다.미리 렌더링을
@rendermode
사용하지 않도록 설정하려면 구성 요소와Routes
구성 요소 모두에HeadOutlet
대한 지시문 특성 값을 변경합니다.- @rendermode="InteractiveServer" + @rendermode="new InteractiveServerRenderMode(prerender: false)"
자세한 내용은 ASP.NET Core Blazor 렌더링 모드를 참조하세요.
Blazor WebAssembly 앱 업데이트
이 문서의 처음 세 섹션에 있는 지침을 따릅니다.
호스트 Blazor WebAssembly 된 앱을 웹앱으로 Blazor 변환
Blazor WebAssembly 앱은 코드 변경 없이 .NET 8에서 지원됩니다. 다음 지침을 사용하여 ASP.NET Core 호스팅 Blazor WebAssembly 앱을 해당하는 .NET 8 Blazor 웹앱으로 변환하여 새로운 .NET 8 기능을 모두 사용할 수 있도록 합니다.
Important
이 섹션에서는 .NET 7 ASP.NET Core 호스팅 Blazor WebAssembly 앱을 .NET 8 Blazor 웹앱으로 변환하는 데 필요한 최소한의 변경 사항에 중점을 둡니다. 모든 새 Blazor 웹앱 규칙을 채택하려면 모든 Blazor 웹앱 규칙 채택 섹션의 지침을 따르세요.
이 문서의 처음 세 섹션에 있는 지침을 따릅니다.
Important
위의 지침을 사용하여 솔루션의
.Client
프로젝트를.Server
.Shared
업데이트합니다..Client
프로젝트 파일(.csproj
)에서 다음 MSBuild 속성을 추가합니다.<NoDefaultLaunchSettingsFile>true</NoDefaultLaunchSettingsFile> <StaticWebAssetProjectMode>Default</StaticWebAssetProjectMode>
또한 프로젝트 파일에서
.Client
패키지 참조를 제거합니다Microsoft.AspNetCore.Components.WebAssembly.DevServer
.- <PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.DevServer"... />
파일 콘텐츠를 프로젝트의 루트
.Server
에서.Client/wwwroot/index.html
만든 새App
구성 요소 파일(App.razor
)로 이동합니다. 파일의 내용을 이동한 후 파일을 삭제합니다index.html
.프로젝트에서
Routes.razor
이름을 .로.Client
바꿉니다App.razor
.에서
Routes.razor
특성 값을AppAssembly
.로 업데이트합니다typeof(Program).Assembly
..Client
프로젝트에서 파일에 항목을_Imports.razor
추가하여 약식 렌더링 모드를 앱에서 사용할 수 있도록 합니다.@using static Microsoft.AspNetCore.Components.Web.RenderMode
프로젝트
_Imports.razor
파일의 복사본을.Client
만들어 프로젝트에 추가합니다.Server
.App.razor
파일에 다음 변경 내용을 적용합니다.웹 사이트의 기본 웹 사이트 제목(
<title>...</title>
)을 구성 요소로HeadOutlet
바꿉니다. 나중에 사용할 웹 사이트 제목을 확인하고 제목 태그와 제목을 제거합니다.- <title>...</title>
제목을 제거한 경우 대화형 WebAssembly 렌더링 모드를 할당하는 구성 요소를 배치
HeadOutlet
합니다(미리 렌더링 사용 안 함).<HeadOutlet @rendermode="new InteractiveWebAssemblyRenderMode(prerender: false)" />
CSS 스타일 번들을 변경합니다.
- <link href="{CLIENT PROJECT ASSEMBLY NAME}.styles.css" rel="stylesheet"> + <link href="{SERVER PROJECT ASSEMBLY NAME}.styles.css" rel="stylesheet">
이전 코드의 자리 표시자:
{CLIENT PROJECT ASSEMBLY NAME}
: 클라이언트 프로젝트 어셈블리 이름입니다. 예:BlazorSample.Client
{SERVER PROJECT ASSEMBLY NAME}
: 서버 프로젝트 어셈블리 이름입니다. 예:BlazorSample.Server
다음 HTML 태그를
<div>...</div>
찾습니다.- <div id="app"> - ... - </div>
대화형 WebAssembly 렌더링 모드(미리 렌더링 사용 안 함)를 사용하여 위의
<div>...</div>
HTML 태그를 구성 요소로Routes
바꿉다.<Routes @rendermode="new InteractiveWebAssemblyRenderMode(prerender: false)" />
스크립트를 다음으로
blazor.webassembly.js
업데이트합니다.blazor.web.js
- <script src="_framework/blazor.webassembly.js"></script> + <script src="_framework/blazor.web.js"></script>
프로젝트의 레이아웃 파일()을
.Client
열고 웹 사이트의 기본 제목(.Client/Shared/MainLayout.razor
{TITLE}
자리 표시자)을 사용하여 구성 요소를 추가PageTitle
합니다.<PageTitle>{TITLE}</PageTitle>
참고 항목
다른 레이아웃 파일도 기본 웹 사이트 제목이 있는
PageTitle
구성 요소를 받아야 합니다.자세한 내용은 ASP.NET Core Blazor 앱의 헤드 콘텐츠 제어를 참조하세요.
다음 줄에서
.Client/Program.cs
제거합니다.- builder.RootComponents.Add<App>("#app"); - builder.RootComponents.Add<HeadOutlet>("head::after");
다음과 같이
.Server/Program.cs
를 업데이트합니다.프로젝트에 구성 요소 및 대화형 WebAssembly 구성 요소 서비스를 추가 Razor 합니다. 연결 호출을 사용하여 호출
AddRazorComponents
합니다AddInteractiveWebAssemblyComponents
. 호출은AddRazorComponents
기본적으로 위조 방지 서비스(AddAntiforgery
)를 추가합니다.builder.Services.AddRazorComponents() .AddInteractiveWebAssemblyComponents();
요청 처리 파이프라인에 위조 방지 미들웨어를 추가합니다.
다음 코드를 배치합니다.
- 호출 후 .
app.UseRouting
- 호출
app.UseRouting
app.UseEndpoints
이 있는 경우 호출은 해당 호출app.UseAntiforgery
간에 이동해야 합니다. - 호출 후
app.UseAntiforgery
호출해야app.UseAuthorization
합니다(있는 경우). - 앞에서 설명한 대로 자동으로
AddRazorComponents
추가되므로 위조 방지 서비스(builder.Services.AddAntiforgery()
)를 추가할 필요가 없습니다.
app.UseAntiforgery();
다음 줄을 제거합니다.
- app.UseBlazorFrameworkFiles();
다음 줄을 제거합니다.
- app.MapFallbackToFile("index.html");
위의 줄을 호출
MapRazorComponents
로 바꾸고, 구성 요소를 루트 구성 요소 유형으로 제공하고App
, 연결된 호출을AddInteractiveWebAssemblyRenderMode
추가합니다.AddAdditionalAssemblies
app.MapRazorComponents<App>() .AddInteractiveWebAssemblyRenderMode() .AddAdditionalAssemblies(typeof({CLIENT APP NAMESPACE}._Imports).Assembly);
앞의 예제
{CLIENT APP NAMESPACE}
에서 자리 표시자는 프로젝트의 네임스페이스.Client
(예:HostedBlazorApp.Client
)입니다.- 호출 후 .
프로젝트에서 솔루션을 실행합니다.
.Server
Visual Studio의
.Server
경우 앱을 실행할 때 솔루션 탐색기 프로젝트가 선택되어 있는지 확인합니다..NET CLI를 사용하는 경우 프로젝트의 폴더에서
.Server
프로젝트를 실행합니다.
서비스 및 엔드포인트 옵션 구성 업데이트
.NET 8 Blazor 에서 Web Apps가 Blazor 릴리스되면 대화형 구성 요소 서비스 및 구성 요소 엔드포인트 구성을 위한 새 API가 도입되어 서비스 및 엔드포인트 옵션 구성이 업데이트됩니다.
업데이트된 구성 지침은 다음 위치에 표시됩니다.
- 앱 환경 설정 및 읽기: 특히 웹앱의 환경 클라이언트 쪽 읽기 섹션에 업데이트된 지침이 Blazor 포함되어 있습니다.
- 서버 쪽 회로 처리기 옵션: 새 BlazorSignalR 회로 및 허브 옵션 구성을 다룹니다.
- JavaScript에서 구성 요소 렌더링Razor: 동적 구성 요소 등록을 RegisterForJavaScript포함합니다.
- Blazor 사용자 지정 요소: Blazor 웹앱 등록: 루트 구성 요소 사용자 지정 요소 등록을
RegisterCustomElement
포함합니다. - 자산의 Blazor WebAssembly 접두사: 자산의 접두사를 나타내는 경로 문자열의 제어를 Blazor WebAssembly 다룹니다.
- 임시 리디렉션 URL 유효 기간: 서버 쪽 렌더링에서 내보내 Blazor 는 임시 리디렉션 URL에 대한 데이터 보호 유효성의 수명 제어를 다룹니다.
- 자세한 오류: 구성 요소 서버 쪽 렌더링에 대한 Razor 자세한 오류를 사용하도록 설정하는 것을 다룹니다.
- 미리 렌더링 구성: 미리 렌더링은 Web Apps에 Blazor 대해 기본적으로 사용하도록 설정됩니다. 사전 렌더링을 사용하지 않도록 설정하는 앱이 필요한 특별한 상황이 있는 경우 미리 렌더링을 사용하지 않도록 설정하는 방법에 대한 지침은 이 링크를 따르세요.
- 양식 바인딩 옵션: 양식 바인딩 옵션 구성을 다룹니다.
Yarp 라우팅을 사용한 삭제 Blazor Server 해결 방법
이전에 Yarp를 사용하여 앱을 .NET 6 또는 .NET 7로 마이그레이션하기 Blazor Server 위한 증분 마이그레이션에서 Yarp로 ASP.NET Core Blazor Server 지원 사용의 지침을 따른 경우 문서의 지침을 따를 때 수행한 해결 단계를 되돌릴 수 있습니다. Yarp에 대한 Blazor Server 라우팅 및 딥 링크는 .NET 8에서 올바르게 작동합니다.
레이아웃 구성 요소의 구성 요소 마이그레이션 CascadingValue
연계 매개 변수는 렌더링 모드 경계를 넘어 데이터를 전달하지 않으며 레이아웃은 대화형 앱에서 정적으로 렌더링됩니다. 따라서 대화형으로 렌더링된 구성 요소에서 연계 매개 변수를 사용하려는 앱은 레이아웃에서 값을 연계할 수 없습니다.
마이그레이션에 대한 두 가지 방법은 다음과 같습니다.
- (권장) 상태를 루트 수준 연계 값으로 전달합니다. 자세한 내용은 루트 수준 연계 값을 참조 하세요.
- 구성 요소의 라우터를
Routes
구성 요소로CascadingValue
래핑하고Routes
구성 요소를 대화형으로 렌더링합니다. 예를 들어 구성 요소를 참조CascadingValue
하세요.
자세한 내용은 Cascading 값/매개 변수 및 렌더링 모드 경계를 참조 하세요.
MSBuild 속성 마이그레이션 BlazorEnableCompression
압축을 사용하지 않도록 설정하고 .NET 7 이하를 대상으로 하지만 .NET 8 SDK로 빌드된 앱의 BlazorEnableCompression
경우 Blazor WebAssembly MSBuild 속성이 다음과 같이 CompressionEnabled
변경되었습니다.
<PropertyGroup>
- <BlazorEnableCompression>false</BlazorEnableCompression>
+ <CompressionEnabled>false</CompressionEnabled>
</PropertyGroup>
.NET CLI 게시 명령을 사용하는 경우 새 속성을 사용합니다.
dotnet publish -p:CompressionEnabled=false
자세한 내용은 다음 리소스를 참조하세요.
구성 요소를 연계 인증 상태 서비스로 마이그레이션 <CascadingAuthenticationState>
.NET 7 이전 CascadingAuthenticationState 버전에서는 구성 요소가 UI 트리의 일부(예: 라우터 주위 Blazor )를 중심으로 래핑되어 연속 인증 상태를 제공합니다.
<CascadingAuthenticationState>
<Router ...>
...
</Router>
</CascadingAuthenticationState>
.NET 8에서는 구성 요소를 사용하지 마세요.CascadingAuthenticationState
- <CascadingAuthenticationState>
<Router ...>
...
</Router>
- </CascadingAuthenticationState>
대신 파일에서 Program
호출 AddCascadingAuthenticationState 하여 서비스 컬렉션에 연계 인증 상태 서비스를 추가합니다.
builder.Services.AddCascadingAuthenticationState();
자세한 내용은 다음 리소스를 참조하세요.
- ASP.NET Core Blazor 인증 및 권한 부여 문서
- 보안 ASP.NET Core 서버 쪽 Blazor 앱
HTTP 캐싱 문제에 대한 새 문서
주요 버전에서 앱을 업그레이드 Blazor 할 때 발생할 수 있는 몇 가지 일반적인 HTTP 캐싱 문제와 HTTP 캐싱 문제를 해결하는 방법을 설명하는 새 문서를 추가했습니다.
자세한 내용은 ASP.NET Core Blazor 앱을 업그레이드할 때 HTTP 캐싱 문제 방지를 참조하세요.
정적 서버 쪽 렌더링을 사용하는 클래스 라이브러리에 대한 새 문서(정적 SSR)
정적 서버 쪽 렌더링(정적 SSR)을 사용하여 클래스 라이브러리(RCL)의 구성 요소 라이브러리 작성 Razor 에 대해 설명하는 새 문서를 추가했습니다.
자세한 내용은 정적 서버 쪽 렌더링(정적 SSR)이 있는 ASP.NET Core Razor 클래스 라이브러리(RCL)를 참조하세요.
추가 어셈블리에서 구성 요소 검색
앱에서 Blazor Server 웹앱으로 마이그레이션할 Blazor 때 앱이 구성 요소 클래스 라이브러리와 같은 추가 어셈블리에서 라우팅 가능한 구성 요소를 사용하는 경우 ASP.NET Core Blazor 라우팅 및 탐색 의 지침에 액세스합니다.
쿼리 문자열에서 매개 변수를 제공할 때 특성 삭제 [Parameter]
[Parameter]
쿼리 문자열에서 매개 변수를 제공할 때 특성이 더 이상 필요하지 않습니다.
- [Parameter]
[SupplyParameterFromQuery]
Blazor Server 스크립트 대체 정책 권한 부여
.NET 7 Blazor Server 에서 스크립트(blazor.server.js
)는 정적 파일 미들웨어에서 제공됩니다. .NET 7 앱에서 인증 미들웨어(UseStaticFiles
)를 호출하기 전에 요청 처리 파이프라인에 정적 파일 미들웨어(UseAuthorization
)에 대한 호출을 배치하면 익명 사용자에게 스크립트를 제공하기 Blazor 에 충분합니다.
.NET 8 Blazor Server 에서 스크립트는 엔드포인트 라우팅을 사용하여 자체 엔드포인트에서 제공됩니다. 이 변경 내용은 고정 버그 - UseStaticFiles 중단 Blazor Server 에 옵션 전달(dotnet/aspnetcore
#45897)에 의해 도입되었습니다.
다음과 같은 다중 테넌트 시나리오를 고려합니다.
- 기본 정책과 대체 정책은 모두 동일하게 설정됩니다.
- 테넌트는 요청 경로의 첫 번째 세그먼트(예:
tld.com/tenant-name/...
)를 사용하여 확인됩니다. - 테넌트 엔드포인트에 대한 요청은 요청 주체에 추가 ID를 추가하는 추가 인증 체계에 의해 인증됩니다.
- 대체 권한 부여 정책에는 추가 ID를 통해 클레임을 검사 요구 사항이 있습니다.
스크립트 파일(blazor.server.js
)에 대한 Blazor 요청은 프레임워크에서 하드 코딩된 위치에서 /_framework/blazor.server.js
제공됩니다. 파일에 대한 요청은 테넌트에 대한 추가 인증 체계에 의해 인증되지 않지만 대체 정책으로 인해 여전히 문제가 발생하여 권한이 없는 결과가 반환됩니다.
이 문제는 현재 2024년 Razor11월에 .NET 9 릴리스로 예정된 FallbackPolicy RequireAuthenticatedUser(dotnet/aspnetcore
51836)로 인해 끊어진 지도 구성 요소의 새로운 프레임워크 기능에 대해 평가 중입니다. 그때까지 다음 세 가지 방법 중 원하는 방법을 사용하여 이 문제를 해결할 수 있습니다.
대체 정책을 사용하지 마세요. 파일의
[Authorize]
특성을_Imports.razor
적용하여 앱의 모든 구성 요소에 적용합니다. 비 blazor 엔드포인트의 경우 명시적으로 사용[Authorize]
하거나RequireAuthorization
.파일의
/_framework/blazor.server.js
엔드포인트에 추가[AllowAnonymous]
합니다.Program
app.MapBlazorHub().Add(endpointBuilder => { if (endpointBuilder is RouteEndpointBuilder { RoutePattern: { RawText: "/_framework/blazor.server.js" } }) { endpointBuilder.Metadata.Add(new AllowAnonymousAttribute()); } });
파일을 허용하도록 검사
HttpContext
사용자 지정AuthorizationHandler
을/_framework/blazor.server.js
등록합니다.
Docker
Docker 이미지 업데이트
Docker를 사용하는 앱의 경우 DockerfileFROM
문 및 스크립트를 업데이트합니다. ASP.NET Core 8.0 런타임을 포함하는 기본 이미지를 사용합니다. ASP.NET Core 7.0과 8.0 간의 다음 docker pull
명령 차이점을 고려합니다.
- docker pull mcr.microsoft.com/dotnet/aspnet:7.0
+ docker pull mcr.microsoft.com/dotnet/aspnet:8.0
Docker 포트 업데이트
.NET 컨테이너 이미지에 구성된 기본 ASP.NET Core 포트가 포트 80에서 8080으로 업데이트되었습니다.
새 ASPNETCORE_HTTP_PORTS
환경 변수가 더 간단한 대안 ASPNETCORE_URLS
으로 추가되었습니다.
자세한 내용은 다음을 참조하세요.
호환성이 손상되는 변경 검토
.NET Core .NET 7.0에서 8.0으로의 주요 변경 내용은 ASP.NET Core 및 Entity Framework Core 섹션을 포함하는 .NET 8의 주요 변경 내용을 참조하세요.
ASP.NET Core
피드백
https://aka.ms/ContentUserFeedback
출시 예정: 2024년 내내 콘텐츠에 대한 피드백 메커니즘으로 GitHub 문제를 단계적으로 폐지하고 이를 새로운 피드백 시스템으로 바꿀 예정입니다. 자세한 내용은 다음을 참조하세요.다음에 대한 사용자 의견 제출 및 보기