Миграция из ASP.NET Core в .NET 7 в .NET 8
В этой статье объясняется, как обновить существующий проект ASP.NET Core 7.0 до ASP.NET Core 8.0.
Необходимые компоненты
Visual Studio 2022 с рабочей нагрузкой ASP.NET и веб-разработка.
Обновление версии пакета SDK для .NET в global.json
Если вы используете global.json
файл для конкретной версии пакета SDK для .NET Core, обновите version
свойство до установленной версии пакета SDK для .NET 8.0. Например:
{
"sdk": {
- "version": "7.0.100"
+ "version": "8.0.100"
}
}
Обновление целевой платформы
Обновите moniker целевой платформы проекта (TFM) файла проекта следующим:net8.0
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
- <TargetFramework>net7.0</TargetFramework>
+ <TargetFramework>net8.0</TargetFramework>
</PropertyGroup>
</Project>
Обновление ссылок на пакеты
В файле проекта обновите каждый Microsoft.AspNetCore.*
атрибут , Microsoft.EntityFrameworkCore.*
Microsoft.Extensions.*
и System.Net.Http.Json
ссылку на 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 Web App соглашений
- Blazor Server Преобразование приложения в приложениеBlazor Web App
- Blazor WebAssembly Обновление приложения
- Преобразование размещенного Blazor WebAssembly приложения в Blazor Web App
- Обновление конфигурации параметра службы и конечной точки
- Удаление Blazor Server с обходным решением маршрутизации Yarp
-
Перенос
CascadingValue
компонентов в компонентах макета -
BlazorEnableCompression
Перенос свойства MSBuild -
Перенос компонента в
<CascadingAuthenticationState>
каскадные службы проверки подлинности - Новая статья: проблемы с кэшированием HTTP во время миграции
- Новая статья: новая статья о библиотеках классов со статическим отображением на стороне сервера (статический SSR)
- Обнаружение компонентов из дополнительных сборок
-
Удаление
[Parameter]
атрибута при указании параметра из строки запроса - Blazor Server Авторизация резервной политики скрипта
Рекомендации по добавлению Blazor поддержки в приложение ASP.NET Core см. в статье "Интеграция компонентов ASP.NET Core Razor с MVC или Razor Pages".
Blazor Server Обновление приложения
Рекомендуется использовать Blazor Web Apps в .NET 8, но Blazor Server поддерживается. Чтобы продолжить использование Blazor Server с .NET 8, следуйте инструкциям в первых трех разделах этой статьи:
-
Обновление версии пакета SDK для .NET в
global.json
- Обновление целевой платформы
- Обновление ссылок на пакет
Новые Blazor функции, представленные для приложенийBlazor Web App, недоступны для Blazor Serverзапуска в .NET 8. Если вы хотите внедрить новые функции .NET 8 Blazor , следуйте инструкциям в любом из следующих разделов:
- Принятие всех Blazor Web App соглашений
- Blazor Server Преобразование приложения в приложениеBlazor Web App
Принятие всех Blazor Web App соглашений
Чтобы при необходимости принять все новые Blazor Web App соглашения, рекомендуется выполнить следующий процесс:
- Создайте приложение из Blazor Web App шаблона проекта. Дополнительные сведения см. в статье Инструментарий для ASP.NET Core Blazor.
- Переместите компоненты и код приложения в новый Blazor Web App, внося изменения в новые функции.
- Обновите макет и стили объекта Blazor Web App.
Новые функции .NET 8 рассматриваются в новых возможностях ASP.NET Core 8.0. При обновлении приложения из .NET 6 или более ранней версии см. заметки о миграции и выпуске (новые статьи) для взаимодействия с выпусками.
Blazor Server Преобразование приложения в приложениеBlazor Web App
Blazor Server приложения поддерживаются в .NET 8 без каких-либо изменений кода. Используйте следующее руководство, чтобы преобразовать Blazor Server приложение в эквивалентный .NET 8, что делает все Blazor Web App .NET 8 доступными.
Внимание
В этом разделе рассматриваются минимальные изменения, необходимые для преобразования приложения .NET 7 Blazor Server в .NET 8 Blazor Web App. Чтобы принять все новые Blazor Web App соглашения, следуйте указаниям в разделе "Принятие всех Blazor Web App соглашений ".
Следуйте инструкциям в первых трех разделах этой статьи:
Переместите содержимое
App
компонента () в новый файл компонента (App.razor
Routes
), добавленный в корневуюRoutes.razor
папку проекта. Оставьте пустойApp.razor
файл в приложении в корневой папке проекта.Добавьте запись в
_Imports.razor
файл, чтобы сделать режимы отрисовки доступными для приложения:@using static Microsoft.AspNetCore.Components.Web.RenderMode
Переместите содержимое
_Host
страницы (Pages/_Host.cshtml
) в пустой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 Blazor Core.
Удалите вспомогательные функции тегов среды для пользовательского интерфейса ошибки и замените их следующим 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();
Добавьте по промежуточному слоя антифоргерии в конвейер обработки запросов после строки, которая добавляет ПО промежуточного слоя перенаправления HTTPS (
app.UseHttpsRedirection
):app.UseAntiforgery();
Предыдущий вызов
app.UseAntiforgery
должен быть помещен после вызовов, если он присутствует, вapp.UseAuthentication
иapp.UseAuthorization
. Нет необходимости явно добавлять службы антифоргерии (builder.Services.AddAntiforgery
), так как они добавляются автоматически AddRazorComponents, что было описано ранее.Blazor Server Если приложение было настроено для отключения предварительной подготовки, можно продолжить отключение предварительной отрисовки для обновленного приложения. В компоненте измените значение, назначенное
App
@rendermode
Razor атрибутам директивы для HeadOutlet компонентов иRoutes
компонентов.Измените значение атрибута
@rendermode
директивы как для компонентов, так HeadOutlet иRoutes
для отключения предварительной подготовки:- @rendermode="InteractiveServer" + @rendermode="new InteractiveServerRenderMode(prerender: false)"
Blazor WebAssembly Обновление приложения
Следуйте инструкциям в первых трех разделах этой статьи:
-
Обновление версии пакета SDK для .NET в
global.json
- Обновление целевой платформы
- Обновление ссылок на пакет
Для приложений, которые принимают отложенную загрузку сборок, измените расширение файла на .dll
.wasm
реализацию приложения, чтобы отразить Blazor WebAssemblyвнедрение упаковки сборки Webcil.
До выпуска .NET 8 руководство по макету развертывания для ASP.NET Основные размещенные Blazor WebAssembly приложения обращается к средам, которые блокируют загрузку и выполнение БИБЛИОТЕК DLL с помощью многопартийного подхода. В .NET 8 или более поздней версии Blazor используется формат файла Webcil для решения этой проблемы. Многопартийное объединение с помощью экспериментального пакета NuGet, описанного в статье макета развертывания WebAssembly, не поддерживается для Blazor приложений в .NET 8 или более поздней версии. Если вы хотите продолжить использование пакета с несколькими частями в приложениях .NET 8 или более поздних версий, вы можете использовать инструкции в статье для создания собственного пакета NuGet с несколькими частями, но он не будет поддерживаться корпорацией Майкрософт.
Преобразование размещенного Blazor WebAssembly приложения в Blazor Web App
Blazor WebAssembly приложения поддерживаются в .NET 8 без каких-либо изменений кода. Используйте следующее руководство, чтобы преобразовать размещенное Blazor WebAssembly приложение ASP.NET Core в эквивалентное .NET 8 Blazor Web App, что делает все новые функции .NET 8 доступными.
Внимание
В этом разделе рассматриваются минимальные изменения, необходимые для преобразования размещенного Blazor WebAssembly приложения .NET 7 ASP.NET Core в .NET 8 Blazor Web App. Чтобы принять все новые Blazor Web App соглашения, следуйте указаниям в разделе "Принятие всех Blazor Web App соглашений ".
Следуйте инструкциям в первых трех разделах этой статьи:
-
Обновление версии пакета SDK для .NET в
global.json
- Обновление целевой платформы
- Обновление ссылок на пакет
Внимание
Используя предыдущее руководство, обновите
.Client
.Server
и.Shared
проекты решения.-
Обновление версии пакета SDK для .NET в
.Client
В файле проекта (.csproj
) добавьте следующие свойства MSBuild:<NoDefaultLaunchSettingsFile>true</NoDefaultLaunchSettingsFile> <StaticWebAssetProjectMode>Default</StaticWebAssetProjectMode>
Кроме того, в
.Client
файле проекта удалите ссылкуMicrosoft.AspNetCore.Components.WebAssembly.DevServer
на пакет:- <PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.DevServer"... />
Переместите содержимое файла из
.Client/wwwroot/index.html
файла в новыйApp
файл компонента (App.razor
), созданный в корне.Server
проекта. После перемещения содержимого файла удалитеindex.html
файл.Переименуйте
App.razor
.Client
в проектRoutes.razor
в .В
Routes.razor
, обновите значение атрибутаAppAssembly
наtypeof(Program).Assembly
..Client
В проекте добавьте запись_Imports.razor
в файл, чтобы сделать режимы отрисовки доступными для приложения:@using static Microsoft.AspNetCore.Components.Web.RenderMode
Создайте копию
.Client
файла проекта_Imports.razor
и добавьте его в.Server
проект.Внесите указанные ниже изменения в файл
App.razor
.Замените название веб-сайта по умолчанию (
<title>...</title>
) компонентом HeadOutlet . Запишите название веб-сайта для использования позже и удалите теги заголовка и заголовок:- <title>...</title>
Где вы удалили заголовок, поместите HeadOutlet компонент, назначив режим интерактивной отрисовки WebAssembly (предварительно отключено):
<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
Найдите следующую
<div>...</div>
разметку HTML:- <div id="app"> - ... - </div>
Замените предыдущую
<div>...</div>
разметкуRoutes
HTML компонентом с помощью режима интерактивной отрисовки WebAssembly (отключена предварительная отрисовка):<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
) и добавьте PageTitle компонент с заголовком веб-сайта по умолчанию ({TITLE}
заполнитель):<PageTitle>{TITLE}</PageTitle>
Примечание.
Другие файлы макета также должны получать компонент с заголовком PageTitle веб-сайта по умолчанию.
Дополнительные сведения см. в статье Управление содержимым head в приложениях ASP.NET Core Blazor.
Удалите следующие строки из
.Client/Program.cs
:- builder.RootComponents.Add<App>("#app"); - builder.RootComponents.Add<HeadOutlet>("head::after");
Обновление
.Server/Program.cs
:Добавьте Razor в проект компоненты и интерактивные службы компонентов WebAssembly. Вызов с прицеленным вызовом AddRazorComponentsAddInteractiveWebAssemblyComponents. Вызов AddRazorComponents добавляет службы антифоргерии (AddAntiforgery) по умолчанию.
builder.Services.AddRazorComponents() .AddInteractiveWebAssemblyComponents();
Добавьте по промежуточному слоя антифоргерии в конвейер обработки запросов.
Поместите следующую строку после вызова
app.UseHttpsRedirection
.app.UseAntiforgery
Вызов должен быть помещен после вызовов, если он присутствует, вapp.UseAuthentication
иapp.UseAuthorization
. Нет необходимости явно добавлять службы антифоргерии (builder.Services.AddAntiforgery
), так как они добавляются автоматически AddRazorComponents, что было описано ранее.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
папки проекта.
Обновление конфигурации параметра службы и конечной точки
После выпуска Blazor Web Apps в .NET 8 Blazor конфигурация параметра параметра службы и конечной точки обновляется с введением нового API для интерактивных служб компонентов и конфигурации конечной точки компонента.
Обновленные рекомендации по настройке отображаются в следующих расположениях:
- Настройка и чтение среды приложения: содержит обновленные рекомендации, особенно в разделе " Чтение клиентской среды" на Blazor Web Appстороне клиента.
- Параметры обработчика канала на стороне сервера: охватывает новую BlazorконфигурациюSignalR каналов и параметров концентратора.
- Отрисовка Razor компонентов из JavaScript: охватывает динамическую регистрацию компонентов с RegisterForJavaScriptпомощью .
-
Blazor пользовательские элементы: регистрация: Blazor Web App охватывает регистрацию пользовательского элемента корневого компонента с
RegisterCustomElement
помощью . - Префикс для Blazor WebAssembly ресурсов: охватывает элемент управления строкой пути, указывающей префикс для Blazor WebAssembly ресурсов.
- Длительность срока действия URL-адреса временного перенаправления. Охватывает контроль срока действия действия защиты данных для URL-адресов временных перенаправлений, Blazor создаваемых отрисовкой на стороне сервера.
- Razor на стороне сервера компонента.
- Конфигурация предварительной подготовки: предварительная отрисовка включена по умолчанию для Blazor Web Apps. Следуйте этой ссылке, чтобы узнать, как отключить предварительную отрисовку, если у вас есть особые обстоятельства, требующие отключения предварительной отрисовки приложения.
- Параметры привязки формы: охватывает конфигурацию параметров привязки формы.
Удаление Blazor Server с обходным решением маршрутизации Yarp
Если вы ранее следовали инструкциям в статье Enable ASP.NET Core Blazor Server support with Yarp incremental migration for migrationing a Blazor Server app with Yarp to .NET 6 or .NET 7, вы можете отменить обходные действия, которые вы предприняли при выполнении рекомендаций статьи. Маршрутизация и глубокая привязка для Blazor Server работы с Yarp работает правильно в .NET 8.
Перенос CascadingValue
компонентов в компонентах макета
Каскадные параметры не передают данные между границами режима отрисовки, а макеты статически отрисовываются в других интерактивных приложениях. Таким образом, приложения, которые стремятся использовать каскадные параметры в интерактивных отрисованных компонентах, не смогут каскадировать значения из макета.
Ниже приведены два подхода к миграции.
- (Рекомендуется) Передать состояние в качестве каскадного значения корневого уровня. Дополнительные сведения см. в разделе каскадных значений корневого уровня.
- Переключите маршрутизатор в
Routes
компонент сCascadingValue
помощью компонента и сделайтеRoutes
компонент интерактивным отрисовкой. Пример смCascadingValue
. в разделе "Компонент".
Дополнительные сведения см. в разделе Каскадные значения и параметры и границы режима отрисовки.
BlazorEnableCompression
Перенос свойства MSBuild
Для Blazor WebAssembly приложений, которые отключают сжатие и целевые версии .NET 7 или более ранних версий, но создаются с помощью пакета SDK для .NET 8, BlazorEnableCompression
свойство MSBuild изменилось на CompressionEnabled
:
<PropertyGroup>
- <BlazorEnableCompression>false</BlazorEnableCompression>
+ <CompressionEnabled>false</CompressionEnabled>
</PropertyGroup>
При использовании команды публикации .NET CLI используйте новое свойство:
dotnet publish -p:CompressionEnabled=false
Дополнительные сведения см. на следующих ресурсах:
- Критические изменения флага сжатия статических веб-ресурсов (dotnet/announcements #283)
- Размещение и развертывание ASP.NET Core Blazor WebAssembly
Перенос компонента в <CascadingAuthenticationState>
каскадные службы проверки подлинности
В .NET 7 или более ранней CascadingAuthenticationState версии компонент упаковывается вокруг части дерева пользовательского интерфейса, например вокруг Blazor маршрутизатора, чтобы обеспечить каскадное состояние проверки подлинности:
<CascadingAuthenticationState>
<Router ...>
...
</Router>
</CascadingAuthenticationState>
В .NET 8 не используйте CascadingAuthenticationState компонент:
- <CascadingAuthenticationState>
<Router ...>
...
</Router>
- </CascadingAuthenticationState>
Вместо этого добавьте каскадные службы проверки подлинности в коллекцию служб, вызвав AddCascadingAuthenticationState в Program
файле:
builder.Services.AddCascadingAuthenticationState();
Дополнительные сведения см. на следующих ресурсах:
- статья ASP.NET Базовая Blazor проверка подлинности и авторизация
- Проверка подлинности и авторизация в Blazor ASP.NET Core
Новая статья о проблемах кэширования HTTP
Мы добавили новую статью, в которой рассматриваются некоторые распространенные проблемы с кэшированием HTTP, которые могут возникнуть при обновлении Blazor приложений в основных версиях и устранении проблем с кэшированием HTTP.
Дополнительные сведения см. в разделе Blazor ASP.NET Core.
Новая статья о библиотеках классов со статическим отображением на стороне сервера (статический SSR)
Мы добавили новую статью, которая обсуждает авторство библиотек компонентов в Razor библиотеках классов (RCLs) со статическим отображением на стороне сервера (статический SSR).
Дополнительные сведения см. в статье ASP.NET Библиотеки классов Core Razor (RCLs) со статическим отображением на стороне сервера (статический SSR).
Обнаружение компонентов из дополнительных сборок
При переходе из Blazor Server приложения в приложение Blazor Web Appк руководству по Blazor ASP.NET Core, если приложение использует routable компоненты из дополнительных сборок, таких как библиотеки классов компонентов.
Удаление [Parameter]
атрибута при указании параметра из строки запроса
Атрибут [Parameter]
больше не требуется при предоставлении параметра из строки запроса:
- [Parameter]
[SupplyParameterFromQuery]
Blazor Server Авторизация резервной политики скрипта
В .NET 7 Blazor Server скрипт (blazor.server.js
) обслуживается ПО промежуточного слоя статических файлов. Размещение вызова ПО промежуточного слоя статических файлов () в конвейере обработки запросов перед вызовом ПО промежуточного слоя авторизации (UseStaticFilesUseAuthorization) достаточно в приложениях .NET 7 для обслуживания скрипта Blazor анонимным пользователям.
В .NET 8 Blazor Server скрипт обслуживается собственной конечной точкой, используя маршрутизацию конечных точек. Это изменение представлено исправленной ошибкой . Передача параметров в разрывы Blazor Server UseStaticFiles (dotnet/aspnetcore
#45897).
Рассмотрим сценарий с несколькими клиентами, где:
- Политики по умолчанию и резервные политики задаются одинаково.
- Клиент разрешается с помощью первого сегмента в пути запроса (например,
tld.com/tenant-name/...
). - Запросы к конечным точкам арендатора проходят проверку подлинности с помощью дополнительной схемы проверки подлинности, которая добавляет дополнительное удостоверение к субъекту запроса.
- Политика резервной авторизации имеет требования, которые проверяют утверждения с помощью дополнительного удостоверения.
Запросы к файлу скрипта Blazor (blazor.server.js
) обслуживаются /_framework/blazor.server.js
по адресу, который жестко закодирован в платформе. Запросы к файлу не проходят проверку подлинности по дополнительной схеме проверки подлинности для клиентов , но по-прежнему оспариваются резервной политикой, что приводит к возврату несанкционированного результата.
Эта проблема рассматривается для новой функции платформы в MapRazorComponents, нарушенной с помощью FallbackPolicy RequireAuthenticatedUser (dotnet/aspnetcore
51836), которая в настоящее время запланирована на выпуск .NET 9 в ноябре 2024 года. До тех пор вы можете обойти эту проблему с помощью любого из следующих трех подходов:
Не используйте резервную политику.
[Authorize]
Примените атрибут в_Imports.razor
файле, чтобы применить его ко всем компонентам приложения. Для конечных точек, отличных от blazor, явно используйте[Authorize]
илиRequireAuthorization
.Добавьте
[AllowAnonymous]
в конечную точку/_framework/blazor.server.js
вProgram
файле:app.MapBlazorHub().Add(endpointBuilder => { if (endpointBuilder is RouteEndpointBuilder { RoutePattern: { RawText: "/_framework/blazor.server.js" } }) { endpointBuilder.Metadata.Add(new AllowAnonymousAttribute()); } });
Зарегистрируйте пользователь
AuthorizationHandler
, который проверяетHttpContext
разрешение файла/_framework/blazor.server.js
.
Docker
Обновление образов Docker
Для приложений с помощью Docker обновите инструкции и скрипты DockerfileFROM
. Используйте базовый образ, включающий среду выполнения ASP.NET Core 8.0. Рассмотрим следующее docker pull
различие между ASP.NET Core 7.0 и 8.0:
- docker pull mcr.microsoft.com/dotnet/aspnet:7.0
+ docker pull mcr.microsoft.com/dotnet/aspnet:8.0
Обновление порта Docker
Порт по умолчанию ASP.NET Core, настроенный в образах контейнеров .NET, обновлен с порта 80 до 8080.
Новая ASPNETCORE_HTTP_PORTS
переменная среды была добавлена в качестве более простой альтернативы ASPNETCORE_URLS
.
Дополнительные сведения см. в разделе:
- По умолчанию ASP.NET основной порт изменился с 80 по 8080.
-
Укажите только порты с помощью
ASPNETCORE_HTTP_PORTS
Просмотр критических изменений
Критические изменения от .NET Core .NET 7.0 до 8.0 см. в разделе "Критические изменения" в .NET 8, включающем разделы ASP.NET Core и Entity Framework Core .
ASP.NET Core