Migruj z ASP.NET Core 3,1 do 5,0Migrate from ASP.NET Core 3.1 to 5.0

Przez Scott AddieBy Scott Addie

W tym artykule wyjaśniono, jak zaktualizować istniejący projekt ASP.NET Core 3,1 do ASP.NET Core 5,0.This article explains how to update an existing ASP.NET Core 3.1 project to ASP.NET Core 5.0.

Wymagania wstępnePrerequisites

Aktualizacja zestaw .NET Core SDK wersji w global.jsnaUpdate .NET Core SDK version in global.json

Jeśli polegasz na global.jspliku w celu wybrania konkretnej wersji zestaw .NET Core SDK, zaktualizuj version Właściwość do zainstalowanej wersji zestawu SDK programu .NET 5,0.If you rely upon a global.json file to target a specific .NET Core SDK version, update the version property to the .NET 5.0 SDK version that's installed. Na przykład:For example:

{
  "sdk": {
-    "version": "3.1.200"
+    "version": "5.0.100"
  }
}

Aktualizowanie platformy docelowejUpdate the target framework

Jeśli aktualizujesz Blazor WebAssembly projekt, przejdź do sekcji Aktualizowanie Blazor WebAssembly projektów .If updating a Blazor WebAssembly project, skip to the Update Blazor WebAssembly projects section. W przypadku każdego innego typu projektu ASP.NET Core należy zaktualizować moniker struktury docelowej (TFM) pliku projektu do net5.0 :For any other ASP.NET Core project type, update the project file's Target Framework Moniker (TFM) to net5.0:

<Project Sdk="Microsoft.NET.Sdk.Web">

  <PropertyGroup>
-    <TargetFramework>netcoreapp3.1</TargetFramework>
+    <TargetFramework>net5.0</TargetFramework>
  </PropertyGroup>

</Project>

Aktualizacja Blazor WebAssembly i Blazor Server projektyUpdate Blazor WebAssembly and Blazor Server projects

Wskazówki zawarte w tej sekcji dotyczą obu Blazor modeli hostingu. Poniższe sekcje zawierają dodatkowe wskazówki dotyczące hostingu modeli i typów aplikacji. Zastosuj wskazówki ze wszystkich odpowiednich sekcji do aplikacji.The guidance in this section applies to both Blazor hosting models. Sections following this section provide additional guidance specific to hosting models and app types. Apply the guidance from all relevant sections to your app.

  1. W wwwroot/index.html Blazor WebAssembly aplikacji lub Pages/_Host.cshtml Blazor Server aplikacji, Dodaj <link> element do <head> elementu style.In wwwroot/index.html of a Blazor WebAssembly app or the Pages/_Host.cshtml of a Blazor Server app, add a <link> element to the <head> element for styles. W poniższych <link> href wartości atrybutów elementu symbol zastępczy {ASSEMBLY NAME} jest nazwą zestawu aplikacji.In the following <link> element href attribute values, the placeholder {ASSEMBLY NAME} is the app's assembly name.

    +<link href="{ASSEMBLY NAME}.styles.css" rel="stylesheet" />
    

    Autonomiczny Blazor WebAssembly lub Blazor Server przykład:Standalone Blazor WebAssembly or Blazor Server example:

    +<link href="BlazorSample.styles.css" rel="stylesheet" />
    

    Client projekt Blazor WebAssembly przykładowego rozwiązania hostowanego:Client project of a hosted Blazor WebAssembly solution example:

    +<link href="BlazorSample.Client.styles.css" rel="stylesheet" />
    
  2. Dołącz nową przestrzeń nazw do _Imports.razor pliku aplikacji na potrzeby wirtualizacji składników Microsoft.AspNetCore.Components.Web.Virtualization .Include a new namespace in the app's _Imports.razor file for component virtualization, Microsoft.AspNetCore.Components.Web.Virtualization. Następujące _Imports.razor pliki pokazują domyślne przestrzenie nazw w aplikacjach generowanych na podstawie Blazor szablonów projektu.The following _Imports.razor files show the default namespaces in apps generated from the Blazor project templates. Symbol zastępczy {ASSEMBLY NAME} jest nazwą zestawu aplikacji.The placeholder {ASSEMBLY NAME} is the app's assembly name.

    Blazor WebAssembly (_Imports.razor):Blazor WebAssembly (_Imports.razor):

    @using System.Net.Http
    @using System.Net.Http.Json
    @using Microsoft.AspNetCore.Components.Forms
    @using Microsoft.AspNetCore.Components.Routing
    @using Microsoft.AspNetCore.Components.Web
    @using Microsoft.AspNetCore.Components.Web.Virtualization
    @using Microsoft.AspNetCore.Components.WebAssembly.Http
    @using Microsoft.JSInterop
    @using {ASSEMBLY NAME}
    @using {ASSEMBLY NAME}.Shared
    

    Blazor Server (_Imports.razor):Blazor Server (_Imports.razor):

    @using System.Net.Http
    @using Microsoft.AspNetCore.Authorization
    @using Microsoft.AspNetCore.Components.Authorization
    @using Microsoft.AspNetCore.Components.Forms
    @using Microsoft.AspNetCore.Components.Routing
    @using Microsoft.AspNetCore.Components.Web
    @using Microsoft.AspNetCore.Components.Web.Virtualization
    @using Microsoft.JSInterop
    @using {ASSEMBLY NAME}
    @using {ASSEMBLY NAME}.Shared
    
  3. W MainLayout składniku ( Shared/MainLayout.razor ) OTOCZ znaczniki HTML składnika z <div> elementem, który ma class atrybut ustawiony na page :In the MainLayout component (Shared/MainLayout.razor), surround the component's HTML markup with a <div> element that has a class attribute set to page:

    <div class="page">
    
        ...
    
    </div>
    
  4. Dodaj następujące pliki do Shared folderu:Add the following files to the Shared folder:

    MainLayout.razor.css:MainLayout.razor.css:

    .page {
        position: relative;
        display: flex;
        flex-direction: column;
    }
    
    .main {
        flex: 1;
    }
    
    .sidebar {
        background-image: linear-gradient(180deg, rgb(5, 39, 103) 0%, #3a0647 70%);
    }
    
    .top-row {
        background-color: #f7f7f7;
        border-bottom: 1px solid #d6d5d5;
        justify-content: flex-end;
        height: 3.5rem;
        display: flex;
        align-items: center;
    }
    
        .top-row ::deep a, .top-row .btn-link {
            white-space: nowrap;
            margin-left: 1.5rem;
        }
    
        .top-row a:first-child {
            overflow: hidden;
            text-overflow: ellipsis;
        }
    
    @media (max-width: 767.98px) {
        .top-row:not(.auth) {
            display: none;
        }
    
        .top-row.auth {
            justify-content: space-between;
        }
    
        .top-row a, .top-row .btn-link {
            margin-left: 0;
        }
    }
    
    @media (min-width: 768px) {
        .page {
            flex-direction: row;
        }
    
        .sidebar {
            width: 250px;
            height: 100vh;
            position: sticky;
            top: 0;
        }
    
        .top-row {
            position: sticky;
            top: 0;
            z-index: 1;
        }
    
        .main > div {
            padding-left: 2rem !important;
            padding-right: 1.5rem !important;
        }
    }
    

    NavMenu.razor.css:NavMenu.razor.css:

    .navbar-toggler {
        background-color: rgba(255, 255, 255, 0.1);
    }
    
    .top-row {
        height: 3.5rem;
        background-color: rgba(0,0,0,0.4);
    }
    
    .navbar-brand {
        font-size: 1.1rem;
    }
    
    .oi {
        width: 2rem;
        font-size: 1.1rem;
        vertical-align: text-top;
        top: -2px;
    }
    
    .nav-item {
        font-size: 0.9rem;
        padding-bottom: 0.5rem;
    }
    
        .nav-item:first-of-type {
            padding-top: 1rem;
        }
    
        .nav-item:last-of-type {
            padding-bottom: 1rem;
        }
    
        .nav-item ::deep a {
            color: #d7d7d7;
            border-radius: 4px;
            height: 3rem;
            display: flex;
            align-items: center;
            line-height: 3rem;
        }
    
    .nav-item ::deep a.active {
        background-color: rgba(255,255,255,0.25);
        color: white;
    }
    
    .nav-item ::deep a:hover {
        background-color: rgba(255,255,255,0.1);
        color: white;
    }
    
    @media (min-width: 768px) {
        .navbar-toggler {
            display: none;
        }
    
        .collapse {
            /* Never collapse the sidebar for wide screens */
            display: block;
        }
    }
    
  5. Najnowszy plik podstawowy wwwroot/css/app.css Blazor WebAssembly aplikacji lub wwwroot/css/site.css pliku Blazor Server aplikacji zawiera następujące style.The latest base wwwroot/css/app.css file of a Blazor WebAssembly app or wwwroot/css/site.css file of a Blazor Server app includes the following styles. Usuń dodatkowe style, pozostawiając następujące style i dodanych do aplikacji.Remove extra styles leaving the following styles and any that you've added to the app.

    Następujący arkusz stylów zawiera tylko style podstawowe i nie zawiera niestandardowych stylów dodanych przez dewelopera:The following stylesheet only includes base styles and does not include custom styles added by the developer:

    @import url('open-iconic/font/css/open-iconic-bootstrap.min.css');
    
    html, body {
        font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;
    }
    
    a, .btn-link {
        color: #0366d6;
    }
    
    .btn-primary {
        color: #fff;
        background-color: #1b6ec2;
        border-color: #1861ac;
    }
    
    .content {
        padding-top: 1.1rem;
    }
    
    .valid.modified:not([type=checkbox]) {
        outline: 1px solid #26b050;
    }
    
    .invalid {
        outline: 1px solid red;
    }
    
    .validation-message {
        color: red;
    }
    
    #blazor-error-ui {
        background: lightyellow;
        bottom: 0;
        box-shadow: 0 -1px 2px rgba(0, 0, 0, 0.2);
        display: none;
        left: 0;
        padding: 0.6rem 1.25rem 0.7rem 1.25rem;
        position: fixed;
        width: 100%;
        z-index: 1000;
    }
    
    #blazor-error-ui .dismiss {
        cursor: pointer;
        position: absolute;
        right: 0.75rem;
        top: 0.5rem;
    }
    

Aktualizowanie Blazor WebAssembly projektówUpdate Blazor WebAssembly projects

Postępuj zgodnie ze wskazówkami w sekcji Poprzednia Aktualizacja Blazor WebAssembly i Blazor Server projekty .Follow the guidance in the preceding Update Blazor WebAssembly and Blazor Server projects section.

W przypadku Blazor WebAssembly projektu, w tym Client projektu rozwiązania hostowanego Blazor , zastosuj następujące zmiany do pliku projektu:For a Blazor WebAssembly project, including the Client project of a hosted Blazor solution, apply the following changes to the project file:

  1. Zaktualizuj zestaw SDK z Microsoft.NET.Sdk.Web programu do Microsoft.NET.Sdk.BlazorWebAssembly :Update the SDK from Microsoft.NET.Sdk.Web to Microsoft.NET.Sdk.BlazorWebAssembly:

    - <Project Sdk="Microsoft.NET.Sdk.Web">
    + <Project Sdk="Microsoft.NET.Sdk.BlazorWebAssembly">
    

    Uwaga

    Ta aktualizacja dotyczy tylko projektów autonomicznych Blazor WebAssembly i Client projektów hostowanych Blazor rozwiązań.This update only applies to standalone Blazor WebAssembly projects and the Client projects of hosted Blazor solutions.

  2. Zaktualizuj następujące właściwości:Update the following properties:

    <Project Sdk="Microsoft.NET.Sdk.BlazorWebAssembly">
    
      <PropertyGroup>
    -     <TargetFramework>netstandard2.1</TargetFramework>
    -     <RazorLangVersion>3.0</RazorLangVersion>
    +     <TargetFramework>net5.0</TargetFramework>
      </PropertyGroup>
    
  3. Usuń odwołanie do pakietu do Microsoft. AspNetCore. Components. webassembly. Build:Remove the package reference to Microsoft.AspNetCore.Components.WebAssembly.Build:

    <ItemGroup>
    -    <PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.Build" Version="3.2.1" PrivateAssets="all" />
    
  4. Zaktualizuj inne pakiety do ich najnowszych wersji.Update other packages to their latest versions. Najnowsze wersje można znaleźć pod adresem NuGet.org.The latest versions can be found at NuGet.org.

  5. W programie wwwroot/index.html Zmień element, który ładuje App składnik do <div> elementu z id zestawem app :In wwwroot/index.html, change the element that loads the App component to a <div> element with an id set to app:

    -<app>Loading...</app>
    +<div id="app">Loading...</div>
    
  6. W Program.Main ( Program.cs ):In Program.Main (Program.cs):

    • Zmień odwołanie do <app> elementu na SELEKTOR CSS, dodając # do niego skrót.Change the reference to the <app> element to a CSS selector by adding a hash # to it.
    • Zmień HttpClient rejestrację na zakres.Change the HttpClient registration to scoped.
    -builder.RootComponents.Add<App>("app");
    +builder.RootComponents.Add<App>("#app");
    
    -builder.Services.AddTransient(sp => new HttpClient 
    -    { BaseAddress = new Uri(builder.HostEnvironment.BaseAddress) });
    +builder.Services.AddScoped(sp => new HttpClient 
    +    { BaseAddress = new Uri(builder.HostEnvironment.BaseAddress) });
    

Aplikacja autonomiczna Blazor WebAssembly z kontami MicrosoftStandalone Blazor WebAssembly app with Microsoft Accounts

Postępuj zgodnie ze wskazówkami w sekcji poprzednie aktualizacje Blazor WebAssembly i Blazor Server projekty i Aktualizuj Blazor WebAssembly projekty .Follow the guidance in the preceding Update Blazor WebAssembly and Blazor Server projects and Update Blazor WebAssembly projects sections.

W przypadku aplikacji autonomicznej Blazor WebAssembly zarejestrowanej w Azure Portal korzystania z usługi Azure Active Directory (AAD) dla kont Microsoft:For a standalone Blazor WebAssembly app registered in the Azure portal to use Azure Active Directory (AAD) for Microsoft Accounts:

  • Aplikacja wymaga openid offline_access zakresów i:The app requires the openid and offline_access scopes:

    options.ProviderOptions.DefaultAccessTokenScopes.Add("openid");
    options.ProviderOptions.DefaultAccessTokenScopes.Add("offline_access");
    
  • W bloku uwierzytelnianie aplikacji Azure Portal:In the Azure portal app registration Authentication blade:

    1. Usuń konfigurację platformy sieci Web .Remove the Web platform configuration.
    2. Dodaj jednostronicową konfigurację platformy aplikacji z identyfikatorem URI przekierowania aplikacji.Add a Single-page application platform configuration with the app's redirect URI.
    3. Wyłącz niejawne przyznanie tokenów dostępu i tokenów identyfikatorów.Disable Implicit grant for Access tokens and ID tokens.

Aby uzyskać więcej informacji, zobacz Zabezpieczanie ASP.NET Core Blazor WebAssembly aplikacji autonomicznej przy użyciu kont Microsoft.For more information, see Zabezpieczanie ASP.NET Core Blazor WebAssembly aplikacji autonomicznej przy użyciu kont Microsoft.

Aplikacja autonomiczna Blazor WebAssembly z Azure Active Directory (AAD)Standalone Blazor WebAssembly app with Azure Active Directory (AAD)

Postępuj zgodnie ze wskazówkami w sekcji poprzednie aktualizacje Blazor WebAssembly i Blazor Server projekty i Aktualizuj Blazor WebAssembly projekty .Follow the guidance in the preceding Update Blazor WebAssembly and Blazor Server projects and Update Blazor WebAssembly projects sections.

W przypadku aplikacji autonomicznej Blazor WebAssembly zarejestrowanej w Azure Portal używać Azure Active Directory (AAD):For a standalone Blazor WebAssembly app registered in the Azure portal to use Azure Active Directory (AAD):

  • Aplikacja wymaga https://graph.microsoft.com/User.Read zakresu:The app requires the https://graph.microsoft.com/User.Read scope:

    options.ProviderOptions.DefaultAccessTokenScopes
        .Add("https://graph.microsoft.com/User.Read");
    
  • W bloku uwierzytelnianie aplikacji Azure Portal:In the Azure portal app registration Authentication blade:

    1. Usuń konfigurację platformy sieci Web .Remove the Web platform configuration.
    2. Dodaj jednostronicową konfigurację platformy aplikacji z identyfikatorem URI przekierowania aplikacji.Add a Single-page application platform configuration with the app's redirect URI.
    3. Wyłącz niejawne przyznanie tokenów dostępu i tokenów identyfikatorów.Disable Implicit grant for Access tokens and ID tokens.

Aby uzyskać więcej informacji, zobacz Zabezpieczanie ASP.NET Core Blazor WebAssembly aplikacji autonomicznej za pomocą Azure Active Directory.For more information, see Zabezpieczanie ASP.NET Core Blazor WebAssembly aplikacji autonomicznej za pomocą Azure Active Directory.

Aplikacja autonomiczna Blazor WebAssembly z usługą Azure Active Directory (AAD) B2CStandalone Blazor WebAssembly app with Azure Active Directory (AAD) B2C

Postępuj zgodnie ze wskazówkami w sekcji poprzednie aktualizacje Blazor WebAssembly i Blazor Server projekty i Aktualizuj Blazor WebAssembly projekty .Follow the guidance in the preceding Update Blazor WebAssembly and Blazor Server projects and Update Blazor WebAssembly projects sections.

W przypadku aplikacji autonomicznej Blazor WebAssembly zarejestrowanej w Azure Portal używać Azure Active Directory (AAD) B2C:For a standalone Blazor WebAssembly app registered in the Azure portal to use Azure Active Directory (AAD) B2C:

  • Aplikacja wymaga openid offline_access zakresów i:The app requires the openid and offline_access scopes:

    options.ProviderOptions.DefaultAccessTokenScopes.Add("openid");
    options.ProviderOptions.DefaultAccessTokenScopes.Add("offline_access");
    
  • W bloku uwierzytelnianie aplikacji Azure Portal:In the Azure portal app registration Authentication blade:

    1. Usuń konfigurację platformy sieci Web .Remove the Web platform configuration.
    2. Dodaj jednostronicową konfigurację platformy aplikacji z identyfikatorem URI przekierowania aplikacji.Add a Single-page application platform configuration with the app's redirect URI.
    3. Wyłącz niejawne przyznanie tokenów dostępu i tokenów identyfikatorów.Disable Implicit grant for Access tokens and ID tokens.

Aby uzyskać więcej informacji, zobacz Zabezpieczanie ASP.NET Core Blazor WebAssembly aplikacji autonomicznej za pomocą Azure Active Directory B2C.For more information, see Zabezpieczanie ASP.NET Core Blazor WebAssembly aplikacji autonomicznej za pomocą Azure Active Directory B2C.

Hostowana Blazor WebAssembly aplikacja z Azure Active Directory (AAD) lub AAD B2CHosted Blazor WebAssembly app with Azure Active Directory (AAD) or AAD B2C

Postępuj zgodnie ze wskazówkami w sekcji poprzednie aktualizacje Blazor WebAssembly i Blazor Server projekty i Aktualizuj Blazor WebAssembly projekty .Follow the guidance in the preceding Update Blazor WebAssembly and Blazor Server projects and Update Blazor WebAssembly projects sections.

Client Rejestracja aplikacji hostowanego Blazor rozwiązania korzystającego z usługi AAD lub AAD B2C do uwierzytelniania użytkowników powinna być oparta na jednostronicowej konfiguracji platformy aplikacji platformy Azure.The Client app registration of a hosted Blazor solution that uses AAD or AAD B2C for user authentication should use a Single-page application Azure Apps platform configuration.

W Client bloku uwierzytelnianie aplikacji Azure Portal:In the Azure portal Client app registration Authentication blade:

  1. Usuń konfigurację platformy sieci Web .Remove the Web platform configuration.
  2. Dodaj jednostronicową konfigurację platformy aplikacji z identyfikatorem URI przekierowania aplikacji.Add a Single-page application platform configuration with the app's redirect URI.
  3. Wyłącz niejawne przyznanie tokenów dostępu i tokenów identyfikatorów.Disable Implicit grant for Access tokens and ID tokens.

Aby uzyskać więcej informacji, zobacz:For more information, see:

Aktualizowanie projektu serwera hostowanego Blazor rozwiązaniaUpdate the Server project of a hosted Blazor solution

Postępuj zgodnie ze wskazówkami w powyższych sekcjach:Follow the guidance in the preceding sections:

Zaktualizuj Server projekt rozwiązania hostowanego Blazor jako aplikację ASP.NET Coreową, postępując zgodnie z ogólnymi wskazówkami w tym artykule.Update the Server project of a hosted Blazor solution as an ASP.NET Core app following the general guidance in this article.

Ponadto Server projekty uwierzytelniające użytkowników w aplikacjach klienckich Blazor WebAssembly za pomocą usługi Azure Active Directory (AAD) lub B2C powinny przyjmować nowe Identity pakiety Microsoft v 2.0:Additionally, Server projects that authenticate users to client Blazor WebAssembly apps with Azure Active Directory (AAD) or B2C should adopt new Microsoft Identity v2.0 packages:

W przypadku usługi AAD:For AAD:

-<PackageReference Include="Microsoft.AspNetCore.Authentication.AzureAD.UI" Version="..." />
+<PackageReference Include="Microsoft.Identity.Web" Version="{VERSION}" />
+<PackageReference Include="Microsoft.Identity.Web.UI" Version="{VERSION}" />

Dla AAD B2C:For AAD B2C:

-<PackageReference Include="Microsoft.AspNetCore.Authentication.AzureADB2C.UI" Version="..." />
+<PackageReference Include="Microsoft.Identity.Web" Version="{VERSION}" />
+<PackageReference Include="Microsoft.Identity.Web.UI" Version="{VERSION}" />

W przypadku poprzedzających odwołań do pakietu Ustal wersje pakietu dla {VERSION} symboli zastępczych w NuGet.org:For the preceding package references, determine the package versions for the {VERSION} placeholders at NuGet.org:

Uwaga

Zestaw SDK Server projektu w hostowanym Blazor WebAssembly rozwiązaniu pozostaje Microsoft.NET.Sdk.Web :The SDK of the Server project in a hosted Blazor WebAssembly solution remains Microsoft.NET.Sdk.Web:

<Project Sdk="Microsoft.NET.Sdk.Web">

Aby uzyskać więcej informacji, zobacz:For more information, see:

Czyszczenie i ponowne kompilowanie rozwiązaniaClean and rebuild the solution

Po przeprowadzeniu migracji aplikacji lub rozwiązania do programu .NET 5 Wyczyść i ponownie skompiluj aplikację lub rozwiązanie.After migrating the app or solution to .NET 5, clean and rebuild the app or solution. Jeśli istnieją niezgodności pakietów między nowym odwołaniem do pakietu i buforowanymi pakietami:If package incompatibilities exist between new package references and cached packages:

  1. Wyczyść pamięć podręczną pakietów NuGet, wykonując następujące dotnet nuget locals polecenie w powłoce poleceń:Clear NuGet package caches by executing the following dotnet nuget locals command in a command shell:

    dotnet nuget locals --clear all
    
  2. Oczyść i ponownie skompiluj aplikację lub rozwiązanie.Clean and rebuild the app or solution.

Rozwiązywanie problemówTroubleshoot

Postępuj zgodnie ze wskazówkami dotyczącymi rozwiązywania problemów na końcu Blazor WebAssembly tematu zabezpieczeń, który ma zastosowanie do Twojej aplikacji:Follow the Troubleshoot guidance at the end of the Blazor WebAssembly security topic that applies to your app:

Aplikacje autonomiczne Blazor WebAssembly :Standalone Blazor WebAssembly apps:

Hostowane Blazor WebAssembly aplikacje:Hosted Blazor WebAssembly apps:

Nieautoryzowany klient dla Azure Active Directory (AAD)Unauthorized client for Azure Active Directory (AAD)

Po uaktualnieniu aplikacji korzystającej z usługi Blazor WebAssembly AAD do uwierzytelniania może zostać wyświetlony następujący błąd w wywołaniu zwrotnym logowania do aplikacji po zalogowaniu się użytkownika w usłudze AAD:After upgrading a Blazor WebAssembly app that uses AAD for authentication, you may receive the following error on the login callback to the app after the user signs in with AAD:

Informacja: uwierzytelnianie Microsoft. AspNetCore. Authorization. DefaultAuthorizationService [2] nie powiodło się.info: Microsoft.AspNetCore.Authorization.DefaultAuthorizationService[2] Authorization failed. Te wymagania nie zostały spełnione: DenyAnonymousAuthorizationRequirement: wymaga uwierzytelnionego użytkownika.These requirements were not met: DenyAnonymousAuthorizationRequirement: Requires an authenticated user.

Błąd wywołania zwrotnego logowania z usługi AAD:Login callback error from AAD:

  • Błąd: unauthorized_clientError: unauthorized_client
  • Zharmonizowan AADB2C90058: The provided application is not configured to allow public clients.Description: AADB2C90058: The provided application is not configured to allow public clients.

Aby rozwiązać ten problem:To resolve the error:

  1. W Azure Portal uzyskaj dostęp do manifestu aplikacji.In the Azure portal, access the app's manifest.
  2. Ustaw allowPublicClient atrybut na null lub true .Set the allowPublicClient attribute to null or true.

Aktualizowanie Blazor progresywnej aplikacji sieci Web (PWA)Update a Blazor Progressive Web Application (PWA)

Dodaj następujący element do pliku projektu aplikacji PWA:Add the following item to the PWA app's project file:

<ItemGroup>
  <ServiceWorker Include="wwwroot\service-worker.js" 
    PublishedContent="wwwroot\service-worker.published.js" />
</ItemGroup>

Aktualizowanie Razor bibliotek klas (RCLs)Update Razor class libraries (RCLs)

Migruj Razor biblioteki klas (RCLs), aby korzystać z nowych interfejsów API lub funkcji wprowadzonych w ramach ASP.NET Core 5,0.Migrate Razor class libraries (RCLs) to take advantage of new APIs or features that are introduced as part of ASP.NET Core 5.0.

Aby zaktualizować element RCL, który jest przeznaczony dla składników:To update a RCL that targets components:

  1. Zaktualizuj następujące właściwości w pliku projektu:Update the following properties in the project file:

    <Project Sdk="Microsoft.NET.Sdk.Razor">
    
      <PropertyGroup>
    -     <TargetFramework>netstandard2.0</TargetFramework>
    -     <RazorLangVersion>3.0</RazorLangVersion>
    +     <TargetFramework>net5.0</TargetFramework>
      </PropertyGroup>
    
  2. Zaktualizuj inne pakiety do ich najnowszych wersji.Update other packages to their latest versions. Najnowsze wersje można znaleźć pod adresem NuGet.org.The latest versions can be found at NuGet.org.

Aby zaktualizować RCL docelowy MVC, zaktualizuj następujące właściwości w pliku projektu:To update an RCL targeting MVC, update the following properties in the project file:

<Project Sdk="Microsoft.NET.Sdk.Razor">

  <PropertyGroup>
-    <TargetFramework>netcoreapp3.1</TargetFramework>
+    <TargetFramework>net5.0</TargetFramework>
    <AddRazorSupportForMvc>true</AddRazorSupportForMvc>
  </PropertyGroup>

Aktualizuj odwołania do pakietówUpdate package references

W pliku projektu Zaktualizuj każdy Microsoft. AspNetCore. *, Microsoft. EntityFrameworkCore. *, Microsoft. Extensions. *, i System.Net.Http.Js atrybut odwołania pakietu Version do 5.0.0 lub nowszego.In the project file, update each Microsoft.AspNetCore.*, Microsoft.EntityFrameworkCore.*, Microsoft.Extensions.*, and System.Net.Http.Json package reference's Version attribute to 5.0.0 or later. Na przykład:For example:

<ItemGroup>
-    <PackageReference Include="Microsoft.AspNetCore.JsonPatch" Version="3.1.6" />
-    <PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="3.1.6">
-    <PackageReference Include="Microsoft.Extensions.Caching.Abstractions" Version="3.1.6" />
-    <PackageReference Include="System.Net.Http.Json" Version="3.2.1" />
+    <PackageReference Include="Microsoft.AspNetCore.JsonPatch" Version="5.0.0" />
+    <PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="5.0.0">
+    <PackageReference Include="Microsoft.Extensions.Caching.Abstractions" Version="5.0.0" />
+    <PackageReference Include="System.Net.Http.Json" Version="5.0.0" />
</ItemGroup>

Aktualizowanie obrazów platformy DockerUpdate Docker images

W przypadku aplikacji korzystających z platformy Docker zaktualizuj swoje Dockerfile FROM instrukcje i skrypty pliku dockerfile.For apps using Docker, update your Dockerfile FROM statements and scripts. Użyj obrazu podstawowego zawierającego środowisko uruchomieniowe ASP.NET Core 5,0.Use a base image that includes the ASP.NET Core 5.0 runtime. Należy wziąć pod uwagę następujące docker pull różnice między ASP.NET Core 3,1 i 5,0:Consider the following docker pull command difference between ASP.NET Core 3.1 and 5.0:

- docker pull mcr.microsoft.com/dotnet/core/aspnet:3.1
+ docker pull mcr.microsoft.com/dotnet/aspnet:5.0

W ramach przenoszenia do ".NET" jako nazwy produktu, obrazy platformy Docker przenoszone z mcr.microsoft.com/dotnet/core repozytoriów do programu mcr.microsoft.com/dotnet .As part of the move to ".NET" as the product name, the Docker images moved from the mcr.microsoft.com/dotnet/core repositories to mcr.microsoft.com/dotnet. Aby uzyskać więcej informacji, zobacz dotnet/dotnet-Docker # 1939.For more information, see dotnet/dotnet-docker#1939.

Zmiany powiązań modelu w ASP.NET Core MVC i Razor stronachModel binding changes in ASP.NET Core MVC and Razor Pages

Wartości DateTime są powiązane z modelem jako czas UTCDateTime values are model bound as UTC times

W ASP.NET Core 3,1 i wcześniejszych DateTime wartości były powiązane z modelem jako czas lokalny, w którym strefa czasowa została ustalona przez serwer.In ASP.NET Core 3.1 and earlier, DateTime values were model-bound as local time, where the timezone was determined by the server. DateTime wartości związane z formatowaniem danych wejściowych (JSON) i DateTimeOffset wartości były powiązane jako strefy czasowe UTC.DateTime values bound from input formatting (JSON) and DateTimeOffset values were bound as UTC timezones.

W ASP.NET Core 5,0 i nowszych powiązania modelu konsekwentnie wiążą DateTime wartości z strefą czasową UTC.In ASP.NET Core 5.0 and later, model binding consistently binds DateTime values with the UTC timezone.

Aby zachować poprzednie zachowanie, Usuń DateTimeModelBinderProvider w Startup.ConfigureServices :To retain the previous behavior, remove the DateTimeModelBinderProvider in Startup.ConfigureServices:

services.AddControllersWithViews(options => 
    options.ModelBinderProviders.RemoveType<DateTimeModelBinderProvider>());

ComplexObjectModelBinderProvider \ ComplexObjectModelBinder Zastąp ComplexTypeModelBinderProvider \ ComplexTypeModelBinderComplexObjectModelBinderProvider \ ComplexObjectModelBinder replace ComplexTypeModelBinderProvider \ ComplexTypeModelBinder

Aby dodać obsługę powiązań modelu dla typów rekordów C# 9, ComplexTypeModelBinderProvider jest:To add support for model binding C# 9 record types, the ComplexTypeModelBinderProvider is:

  • Adnotacje jako przestarzałe.Annotated as obsolete.
  • Nie jest już zarejestrowana domyślnie.No longer registered by default.

Aplikacje korzystające z obecności ComplexTypeModelBinderProvider w ModelBinderProviders kolekcji muszą odwoływać się do nowego dostawcy programu Binder:Apps that rely on the presence of the ComplexTypeModelBinderProvider in the ModelBinderProviders collection need to reference the new binder provider:

- var complexModelBinderProvider = options.ModelBinderProviders.OfType<ComplexTypeModelBinderProvider>();
+ var complexModelBinderProvider = options.ModelBinderProviders.OfType<ComplexObjectModelBinderProvider>();

UseDatabaseErrorPage przestarzałeUseDatabaseErrorPage obsolete

Szablony ASP.NET Core 3,1, które zawierają opcję dla poszczególnych kont użytkowników, generują wywołanie UseDatabaseErrorPage .The ASP.NET Core 3.1 templates that include an option for individual user accounts generate a call to UseDatabaseErrorPage. UseDatabaseErrorPage jest już przestarzałe i należy go zastąpić kombinacją AddDatabaseDeveloperPageExceptionFilter i UseMigrationsEndPoint , jak pokazano w poniższym kodzie:UseDatabaseErrorPage is now obsolete and should be replaced with a combination of AddDatabaseDeveloperPageExceptionFilter and UseMigrationsEndPoint, as shown in the following code:

public void ConfigureServices(IServiceCollection services)
{
    services.AddDbContext<ApplicationDbContext>(options =>
        options.UseSqlServer(
            Configuration.GetConnectionString("DefaultConnection")));
+   services.AddDatabaseDeveloperPageExceptionFilter();
    services.AddDefaultIdentity<IdentityUser>(options => options.SignIn.RequireConfirmedAccount = true)
        .AddEntityFrameworkStores<ApplicationDbContext>();
    services.AddRazorPages();
}

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

Aby uzyskać więcej informacji, zobacz ten problemw serwisie GitHub.For more information, see this GitHub issue.

Przejrzyj istotne zmianyReview breaking changes

Aby uzyskać istotne zmiany z platformy .NET Core 3,1 do platformy .NET 5,0, zobacz istotne zmiany dotyczące migracji z wersji 3,1 do 5,0.For breaking changes from .NET Core 3.1 to .NET 5.0, see Breaking changes for migration from version 3.1 to 5.0. Na liście znajdują się również ASP.NET Core i Entity Framework Core.ASP.NET Core and Entity Framework Core are also included in the list.