.NET 7'de ASP.NET Core'dan .NET 8'e geçiş

Bu makalede, mevcut bir ASP.NET Core 7.0 projesinin ASP.NET Core 8.0'a nasıl güncelleştirilecekleri açıklanmaktadır.

Önkoşullar

içinde .NET SDK sürümünü güncelleştirme global.json

Belirli bir .NET Core SDK sürümünü hedeflemek için bir global.json dosya kullanırsanız, özelliğini yüklü .NET 8.0 SDK sürümüne güncelleştirin version . Örneğin:

{
  "sdk": {
-    "version": "7.0.100"
+    "version": "8.0.100"
  }
}

Hedef çerçeveyi güncelleştirme

Proje dosyasının Target Framework Takma Adını (TFM) olarak net8.0güncelleştirin:

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

  <PropertyGroup>
-    <TargetFramework>net7.0</TargetFramework>
+    <TargetFramework>net8.0</TargetFramework>
  </PropertyGroup>

</Project>

Paket başvurularını güncelleştirme

Proje dosyasında, her Microsoft.AspNetCore.*, Microsoft.EntityFrameworkCore.*, Microsoft.Extensions.*ve System.Net.Http.Json paket başvurusunun Version özniteliğini 8.00 veya üzeri olarak güncelleştirin. Örneğin:

<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

Aşağıdaki geçiş senaryoları ele alınmıştır:

ASP.NET Core uygulamasına destek ekleme Blazor hakkında yönergeler için bkz . ASP.NET Core Razor bileşenlerini ASP.NET Core uygulamalarıyla tümleştirme.

Uygulamayı Blazor Server güncelleştirme

.NET 8'de s kullanmanızı Blazor Web Appöneririz, ancak Blazor Server desteklenir. .NET 8 ile kullanmaya Blazor Server devam etmek için bu makalenin ilk üç bölümündeki yönergeleri izleyin:

için Blazor Web Appsunulan yeni Blazor özellikler .NET 8 altında çalıştırılacak şekilde güncelleştirilen bir Blazor Server uygulamada kullanılamaz. Yeni .NET 8 Blazor özelliklerini benimsemek istiyorsanız aşağıdaki bölümlerden birinde yer alan yönergeleri izleyin:

Tüm Blazor Web App kuralları benimseyin

İsteğe bağlı olarak tüm yeni Blazor Web App kuralları benimsemek için aşağıdaki işlemi öneririz:

  • Proje şablonundan Blazor Web App yeni bir uygulama oluşturun. Daha fazla bilgi için bkz . ASP.NET Core Blazoriçin Araçlar.
  • Uygulamanızın bileşenlerini ve kodunu yeni Blazor Web Appöğesine taşıyın ve yeni özellikleri benimsemek için değişiklikler gerçekleştirin.
  • düzenini ve stillerini güncelleştirin Blazor Web App.

Yeni .NET 8 özellikleri, ASP.NET Core 8.0'daki yenilikler bölümünde ele alınmıştır. .NET 6 veya önceki sürümlerinden bir uygulamayı güncelleştirirken, geçiş ve sürüm notlarına (Yenilikler makaleleri) göz atın.

Bir uygulamayı bir Blazor Server uygulamaya dönüştürme Blazor Web App

Blazor Server uygulamalar herhangi bir kod değişikliği olmadan .NET 8'de desteklenir. Bir Blazor Server uygulamayı eşdeğer bir .NET 8 Blazor Web Appsürümüne dönüştürmek için aşağıdaki kılavuzu kullanın ve bu da tüm yeni .NET 8 özelliklerini kullanılabilir hale getirir.

Önemli

Bu bölüm, .NET 7 Blazor Server uygulamasını .NET 8'e Blazor Web Appdönüştürmek için gereken en düşük değişikliklere odaklanır. Tüm yeni Blazor Web App kuralları benimsemek için Tüm Blazor Web App kuralları benimseyin bölümündeki yönergeleri izleyin.

  1. Bu makalenin ilk üç bölümünde yer alan yönergeleri izleyin:

  2. Bileşenin App (App.razor) içeriğini projenin kök klasörüne eklenen yeni Routes bir bileşen dosyasına (Routes.razor) taşıyın. App.razor Boş dosyayı projenin kök klasöründeki uygulamada bırakın.

  3. Uygulamada kısa işleme modlarını kullanılabilir hale getirmek için dosyaya bir girdi _Imports.razor ekleyin:

    @using static Microsoft.AspNetCore.Components.Web.RenderMode
    
  4. Sayfadaki (Pages/_Host.cshtml) içeriği _Host boş App.razor dosyaya taşıyın. Bileşende aşağıdaki değişiklikleri App yapmaya devam edin.

    Not

    Aşağıdaki örnekte projenin ad alanı şeklindedir BlazorServerApp. Ad alanını projenizle eşleşecek şekilde ayarlayın.

    Dosyanın üst kısmından aşağıdaki satırları kaldırın:

    - @page "/"
    - @using Microsoft.AspNetCore.Components.Web
    - @namespace BlazorServerApp.Pages
    - @addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
    

    Yukarıdaki satırları bir örneği ekleyen bir IHostEnvironment çizgiyle değiştirin:

    @inject IHostEnvironment Env
    

    etiketinden href <base> tilde (~) öğesini kaldırın ve değerini uygulamanızın temel yoluyla değiştirin:

    - <base href="~/" />
    + <base href="/" />
    

    Bileşen için Bileşen Etiketi Yardımcısı'nı HeadOutlet kaldırın ve bileşeniyle HeadOutlet değiştirin.

    Aşağıdaki satırı kaldırın:

    - <component type="typeof(HeadOutlet)" render-mode="ServerPrerendered" />
    

    Yukarıdaki satırı aşağıdakilerle değiştirin:

    <HeadOutlet @rendermode="InteractiveServer" />
    

    Bileşen için Bileşen Etiketi Yardımcısı'nı App kaldırın ve bileşeniyle Routes değiştirin.

    Aşağıdaki satırı kaldırın:

    - <component type="typeof(App)" render-mode="ServerPrerendered" />
    

    Yukarıdaki satırı aşağıdakilerle değiştirin:

    <Routes @rendermode="InteractiveServer" />
    

    Not

    Yukarıdaki yapılandırma, uygulamanın bileşenlerinin etkileşimli sunucu işlemeyi benimsediğini varsayar. Statik sunucu tarafı işlemeyi (SSR) benimseme de dahil olmak üzere daha fazla bilgi için bkz . ASP.NET Çekirdek Blazor işleme modları.

    Hata kullanıcı arabirimi için Ortam Etiketi Yardımcılarını kaldırın ve bunları aşağıdaki Razor işaretlemeyle değiştirin.

    Aşağıdaki satırları kaldırın:

    - <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>
    

    Önceki satırları aşağıdakilerle değiştirin:

    @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>
    }
    

    Betiği olarak Blazor blazor.server.js blazor.web.jsdeğiştirin:

    - <script src="_framework/blazor.server.js"></script>
    + <script src="_framework/blazor.web.js"></script>
    
  5. Pages/_Host.cshtml Dosyayı silin.

  6. Güncelleştirme Program.cs:

    Not

    Aşağıdaki örnekte projenin ad alanı şeklindedir BlazorServerApp. Ad alanını projenizle eşleşecek şekilde ayarlayın.

    Projenin ad alanı için dosyanın en üstüne bir using deyim ekleyin:

    using BlazorServerApp;
    

    öğesini ve öğesini zincirleme bir çağrısıyla AddInteractiveServerComponentsAddRazorComponents değiştirinAddServerSideBlazor.

    Aşağıdaki satırı kaldırın:

    - builder.Services.AddServerSideBlazor();
    

    Önceki satırı bileşen ve etkileşimli sunucu bileşen hizmetleriyle Razor değiştirin. Çağrılması AddRazorComponents varsayılan olarak kötü amaçlı yazılımdan koruma hizmetleri (AddAntiforgery) ekler.

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

    Aşağıdaki satırı kaldırın:

    - app.MapBlazorHub();
    

    Yukarıdaki satırı, bileşeni kök bileşen türü olarak sağlayan App çağrısıyla MapRazorComponentsdeğiştirin ve öğesine AddInteractiveServerRenderModezincirlenmiş bir çağrı ekleyin:

    app.MapRazorComponents<App>()
        .AddInteractiveServerRenderMode();
    

    Aşağıdaki satırı kaldırın:

    - app.MapFallbackToPage("/_Host");
    

    Yönlendirme Ara Yazılımını Kaldır:

    - app.UseRouting();
    

    HTTPS Yeniden Yönlendirme Ara Yazılımı (app.UseHttpsRedirection):

    app.UseAntiforgery();
    

    Yukarıdaki çağrısı app.UseAntiforgery , varsa app.UseAuthentication ve app.UseAuthorizationçağrılarının ardından yerleştirilmelidir. Önceden ele alınan tarafından otomatik AddRazorComponentsolarak eklendiğinden, açıkça kötü amaçlı yazılımdan koruma hizmetleri (builder.Services.AddAntiforgery eklemeye gerek yoktur.

  7. Blazor Server Uygulama, ön kayıt işlemini devre dışı bırakmak üzere yapılandırılmışsa, güncelleştirilmiş uygulama için ön oturum açma özelliğini devre dışı bırakmaya devam edebilirsiniz. bileşeninde App ve Routes bileşenleri için HeadOutlet yönerge özniteliklerine @rendermodeRazor atanan değeri değiştirin.

    Ön kayıt özelliğini devre dışı bırakmak için hem ve HeadOutlet Routes bileşenleri için yönerge özniteliğinin değerini @rendermode değiştirin:

    - @rendermode="InteractiveServer"
    + @rendermode="new InteractiveServerRenderMode(prerender: false)"
    

    Daha fazla bilgi için bkz . ASP.NET Core Blazor işleme modları.

Uygulamayı Blazor WebAssembly güncelleştirme

Bu makalenin ilk üç bölümünde yer alan yönergeleri izleyin:

Gecikmeli derleme yüklemesini benimseyen uygulamalar için, webcil derleme paketlemesinin benimsenmesini yansıtmak Blazor WebAssemblyiçin dosya uzantısını .dll .wasm uygulamanın uygulamasında olarak değiştirin.

.NET 8'in yayımlanmasından önce, ASP.NET Core barındırılan Blazor WebAssembly uygulamalar için dağıtım düzeni kılavuzu, istemcilerin çok parçalı paketleme yaklaşımıyla DLL'leri indirmesini ve yürütmesini engelleyen ortamları ele alır. .NET 8 veya sonraki sürümlerinde, Blazor bu sorunu gidermek için Webcil dosya biçimini kullanır. WebAssembly dağıtım düzeni makalesi tarafından açıklanan deneysel NuGet paketinin kullanıldığı çok parçalı paketleme, .NET 8 veya sonraki sürümlerdeki uygulamalar için Blazor desteklenmez. .NET 8 veya üzeri uygulamalarda çok parçalı paket paketini kullanmaya devam etmek istiyorsanız, makaledeki yönergeleri kullanarak kendi çok parçalı paketleme NuGet paketinizi oluşturabilirsiniz, ancak Microsoft tarafından desteklenmez.

Barındırılan Blazor WebAssembly bir uygulamayı bir uygulamaya dönüştürme Blazor Web App

Blazor WebAssembly uygulamalar herhangi bir kod değişikliği olmadan .NET 8'de desteklenir. ASP.NET Core'da barındırılan Blazor WebAssembly bir uygulamayı eşdeğer bir .NET 8'e Blazor Web Appdönüştürmek için aşağıdaki kılavuzu kullanın ve bu da tüm yeni .NET 8 özelliklerini kullanılabilir hale getirir.

Önemli

Bu bölüm, .NET 7 ASP.NET Core barındırılan Blazor WebAssembly bir uygulamayı .NET 8'e Blazor Web Appdönüştürmek için gereken en düşük değişikliklere odaklanır. Tüm yeni Blazor Web App kuralları benimsemek için Tüm Blazor Web App kuralları benimseyin bölümündeki yönergeleri izleyin.

  1. Bu makalenin ilk üç bölümünde yer alan yönergeleri izleyin:

    Önemli

    Yukarıdaki kılavuzu kullanarak çözümün .Client, .Serverve .Shared projelerini güncelleştirin.

  2. .Client Proje dosyasına ().csproj aşağıdaki MSBuild özelliklerini ekleyin:

    <NoDefaultLaunchSettingsFile>true</NoDefaultLaunchSettingsFile>
    <StaticWebAssetProjectMode>Default</StaticWebAssetProjectMode>
    

    .Client Ayrıca proje dosyasında paket başvuruyu Microsoft.AspNetCore.Components.WebAssembly.DevServer kaldırın:

    - <PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.DevServer"... />
    
  3. Dosya içeriğini dosyadan .Client/wwwroot/index.html projenin kökünde .Server oluşturulan yeni App bir bileşen dosyasına (App.razor) taşıyın. Dosyanın içeriğini taşıdıktan sonra dosyayı silin index.html .

    Projede Routes.razorolarak yeniden adlandırın.App.razor .Client

    içinde Routes.razorözniteliğinin AppAssembly değerini olarak typeof(Program).Assemblygüncelleştirin.

  4. Projede .Client , uygulamada kısa işleme modlarını kullanılabilir hale getirmek için dosyaya bir giriş _Imports.razor ekleyin:

    @using static Microsoft.AspNetCore.Components.Web.RenderMode
    

    Proje dosyasının .Client bir kopyasını oluşturup projeye ekleyin.Server._Imports.razor

  5. Dosyada aşağıdaki değişiklikleri App.razor yapın:

    Web sitesinin varsayılan web sitesi başlığını (<title>...</title>) bir HeadOutlet bileşenle değiştirin. Daha sonra kullanmak üzere web sitesi başlığını not alın ve başlık etiketlerini ve başlığını kaldırın:

    - <title>...</title>
    

    Başlığı kaldırdığınız yerde Etkileşimli WebAssembly işleme modunu atayan bir HeadOutlet bileşen yerleştirin (ön kayıt devre dışı):

    <HeadOutlet @rendermode="new InteractiveWebAssemblyRenderMode(prerender: false)" />
    

    CSS stil paketini değiştirin:

    - <link href="{CLIENT PROJECT ASSEMBLY NAME}.styles.css" rel="stylesheet">
    + <link href="{SERVER PROJECT ASSEMBLY NAME}.styles.css" rel="stylesheet">
    

    Önceki koddaki yer tutucular:

    • {CLIENT PROJECT ASSEMBLY NAME}: İstemci projesi derleme adı. Örnek: BlazorSample.Client
    • {SERVER PROJECT ASSEMBLY NAME}: Sunucu projesi derleme adı. Örnek: BlazorSample.Server

    Aşağıdaki <div>...</div> HTML işaretlemesini bulun:

    - <div id="app">
    -     ...
    - </div>
    

    Etkileşimli WebAssembly işleme modunu kullanarak önceki <div>...</div> HTML işaretlemesini Routes bileşenle değiştirin (ön kayıt devre dışı):

    <Routes @rendermode="new InteractiveWebAssemblyRenderMode(prerender: false)" />
    

    Betiği olarak blazor.web.jsgüncelleştirinblazor.webassembly.js:

    - <script src="_framework/blazor.webassembly.js"></script>
    + <script src="_framework/blazor.web.js"></script>
    
  6. .Client Projenin düzen dosyasını (.Client/Shared/MainLayout.razor) açın ve web sitesinin varsayılan başlığına ({TITLE}yer tutucu) sahip bir PageTitle bileşen ekleyin:

    <PageTitle>{TITLE}</PageTitle>
    

    Not

    Diğer düzen dosyaları da varsayılan web sitesi başlığına sahip bir PageTitle bileşen almalıdır.

    Daha fazla bilgi için bkz . ASP.NET Core Blazor uygulamalarında baş içeriği denetleme.

  7. aşağıdaki satırları uygulamasından .Client/Program.cskaldırın:

    - builder.RootComponents.Add<App>("#app");
    - builder.RootComponents.Add<HeadOutlet>("head::after");
    
  8. Güncelleştirme .Server/Program.cs:

    Projeye bileşen ve etkileşimli WebAssembly bileşen hizmetleri ekleyin Razor . zincirlenmiş AddRazorComponents çağrısı ile çağrısı.AddInteractiveWebAssemblyComponents Çağrılması AddRazorComponents varsayılan olarak kötü amaçlı yazılımdan koruma hizmetleri (AddAntiforgery) ekler.

    builder.Services.AddRazorComponents()
        .AddInteractiveWebAssemblyComponents();
    

    İstek işleme işlem hattına Antiforgery Ara Yazılımı ekleyin.

    çağrısından app.UseHttpsRedirectionsonra aşağıdaki satırı yerleştirin. çağrısı app.UseAntiforgery , varsa app.UseAuthentication ve app.UseAuthorizationçağrılarının ardından yerleştirilmelidir. Önceden ele alınan tarafından otomatik AddRazorComponentsolarak eklendiğinden, açıkça kötü amaçlı yazılımdan koruma hizmetleri (builder.Services.AddAntiforgery eklemeye gerek yoktur.

    app.UseAntiforgery();
    

    Aşağıdaki satırı kaldırın:

    - app.UseBlazorFrameworkFiles();
    

    Aşağıdaki satırı kaldırın:

    - app.MapFallbackToFile("index.html");
    

    Önceki satırı, kök bileşen türü olarak bileşeni sağlayan çağrısıyla MapRazorComponentsdeğiştirin ve ve AddAdditionalAssembliesöğesine AddInteractiveWebAssemblyRenderMode zincirlenmiş çağrılar ekleyin:App

    app.MapRazorComponents<App>()
        .AddInteractiveWebAssemblyRenderMode()
        .AddAdditionalAssemblies(typeof({CLIENT APP NAMESPACE}._Imports).Assembly);
    

    Yukarıdaki örnekte yer tutucu projenin {CLIENT APP NAMESPACE} ad alanıdır .Client (örneğin, HostedBlazorApp.Client).

  9. Çözümü projeden .Server çalıştırın:

    Visual Studio için, uygulamayı çalıştırırken projenin Çözüm Gezgini'de seçili olduğunu .Server onaylayın.

    .NET CLI kullanıyorsanız projeyi projenin klasöründen .Server çalıştırın.

Hizmet ve uç nokta seçeneği yapılandırmasını güncelleştirme

.NET 8'de s sürümüyle Blazor Web Appbirlikte, hizmet ve uç nokta seçeneği yapılandırması, Blazor etkileşimli bileşen hizmetleri ve bileşen uç noktası yapılandırması için yeni API'nin kullanıma sunulmasıyla güncelleştirilir.

Güncelleştirilmiş yapılandırma kılavuzu aşağıdaki konumlarda görünür:

Yarp yönlendirmesi ile bırakma Blazor Server geçici çözümü

Daha önce Yarp ile bir Blazor Server uygulamayı .NET 6 veya .NET 7'ye geçirmek için Artımlı geçişte Yarp ile ASP.NET Core Blazor Server desteğini etkinleştirme başlığı altında yer alan yönergeleri izlediyseniz, makalenin yönergelerini takip ederken uyguladığınız geçici çözüm adımlarını tersine çevirebilirsiniz. Yarp ile yönlendirme ve derin bağlantı Blazor Server .NET 8'de düzgün çalışır.

Düzen bileşenlerindeki bileşenleri geçirme CascadingValue

Basamaklı parametreler işleme modu sınırları arasında veri geçirmez ve düzenler statik olarak başka etkileşimli uygulamalarda işlenir. Bu nedenle, etkileşimli olarak işlenen bileşenlerde basamaklı parametreleri kullanmaya çalışan uygulamalar, düzendeki değerleri art arda getiremez.

Geçiş için iki yaklaşım şunlardır:

Daha fazla bilgi için bkz . Basamaklı değerler/parametreler ve işleme modu sınırları.

BlazorEnableCompression MSBuild özelliğini geçirme

Sıkıştırmayı devre dışı bırakmayan ve .NET 7 veya önceki sürümleri hedefleyen ancak .NET 8 SDK'sı ile oluşturulan uygulamalar için Blazor WebAssembly MSBuild BlazorEnableCompression özelliği olarak CompressionEnableddeğiştirildi:

<PropertyGroup>
-   <BlazorEnableCompression>false</BlazorEnableCompression>
+   <CompressionEnabled>false</CompressionEnabled>
</PropertyGroup>

.NET CLI publish komutunu kullanırken yeni özelliğini kullanın:

dotnet publish -p:CompressionEnabled=false

Daha fazla bilgi edinmek için aşağıdaki kaynaklara bakın:

<CascadingAuthenticationState> Bileşeni basamaklı kimlik doğrulama durumu hizmetlerine geçirme

.NET 7 veya önceki sürümlerinde, CascadingAuthenticationState bileşen, basamaklı kimlik doğrulama durumu sağlamak için kullanıcı arabirimi ağacının bir bölümüne, örneğin yönlendiricinin Blazor etrafında sarmalanır:

<CascadingAuthenticationState>
    <Router ...>
        ...
    </Router>
</CascadingAuthenticationState>

.NET 8'de şu bileşeni kullanmayın CascadingAuthenticationState :

- <CascadingAuthenticationState>
      <Router ...>
          ...
      </Router>
- </CascadingAuthenticationState>

Bunun yerine, dosyada Program arayarak AddCascadingAuthenticationState hizmet koleksiyonuna basamaklı kimlik doğrulama durumu hizmetleri ekleyin:

builder.Services.AddCascadingAuthenticationState();

Daha fazla bilgi edinmek için aşağıdaki kaynaklara bakın:

HTTP önbelleğe alma sorunlarıyla ilgili yeni makale

Uygulamaları ana sürümlere yükseltirken Blazor ortaya çıkabilecek bazı yaygın HTTP önbelleğe alma sorunlarını ve HTTP önbelleğe alma sorunlarının nasıl giderildiğini ele alan yeni bir makale ekledik.

Daha fazla bilgi için bkz . ASP.NET Core Blazor uygulamalarını yükseltirken HTTP önbelleğe alma sorunlarını önleme.

Statik sunucu tarafı işleme (statik SSR) ile sınıf kitaplıklarıyla ilgili yeni makale

Statik sunucu tarafı işleme (statik SSR) ile sınıf kitaplıklarında Razor (RCL) bileşen kitaplığı yazma konusunu ele alan yeni bir makale ekledik.

Daha fazla bilgi için bkz. statik sunucu tarafı işleme (statik SSR) ile ASP.NET Çekirdek Razor sınıf kitaplıkları (KCL'ler).

Ek derlemelerden bileşenleri bulma

Bir uygulamadan uygulamasına Blazor Server Blazor Web Appgeçiş yaparken, uygulama bileşen sınıfı kitaplıkları gibi ek derlemelerden yönlendirilebilir bileşenler kullanıyorsa ASP.NET Çekirdek Blazor yönlendirme ve gezinti kılavuzuna erişin.

Parametre bir sorgu dizesinden sağlandığında drop [Parameter] özniteliği

[Parameter] Sorgu dizesinden bir parametre sağlanırken özniteliği artık gerekli değildir:

- [Parameter]
  [SupplyParameterFromQuery]

Blazor Server betik geri dönüş ilkesi yetkilendirmesi

.NET 7'de betik Blazor Server (blazor.server.js) Statik Dosyalar Ara Yazılımı tarafından sunulur. .NET 7 uygulamalarında Yetkilendirme Ara Yazılımı () çağrısından önce statik dosyalar ara yazılımının (UseStaticFilesUseAuthorization) istek işleme işlem hattına yerleştirilmesi, betiği anonim kullanıcılara sunmak Blazor için yeterlidir.

.NET 8'de betik, Blazor Server uç nokta yönlendirmesi kullanılarak kendi uç noktası tarafından sunulur. Bu değişiklik, Düzeltildi hatası - UseStaticFiles kesmelerine Blazor Server geçiş seçenekleri (dotnet/aspnetcore #45897) tarafından sunulmuştur.

Aşağıdaki durumlarda çok kiracılı bir senaryo düşünün:

  • Hem varsayılan hem de geri dönüş ilkeleri aynı şekilde ayarlanır.
  • Kiracı, istek yolundaki ilk kesim (örneğin, tld.com/tenant-name/...) kullanılarak çözümlenir.
  • Kiracı uç noktalarına yönelik isteklerin kimliği, istek sorumlusuna ek identity bir kimlik doğrulama düzeniyle doğrulanır.
  • Geri dönüş yetkilendirme ilkesi, ek identityaracılığıyla talepleri denetleyebilen gereksinimlere sahiptir.

Betik dosyası (blazor.server.js) istekleriBlazor, çerçevede /_framework/blazor.server.jssabit kodlanmış konumunda sunulur. Dosya isteklerinin kimliği kiracılar için ek kimlik doğrulama düzeni tarafından doğrulanmamıştır, ancak yine de geri dönüş ilkesi tarafından zorlanır ve bu da yetkisiz bir sonuç döndürülmesiyle sonuçlanır.

Bu sorun, Şu anda Kasım 2024'te .NET 9 sürümü için zamanlanmış olan FallbackPolicy RequireAuthenticatedUser (dotnet/aspnetcore 51836) ile bozuk MapRazorComponents'teki yeni bir çerçeve özelliği için değerlendirme aşamasındadır. O zamana kadar, aşağıdaki üç yaklaşımdan herhangi birini kullanarak bu soruna geçici bir çözüm bulabilirsiniz:

  • Geri dönüş ilkesi kullanmayın. [Authorize] Dosyanın içindeki özniteliğini _Imports.razor uygulayarak uygulamanın tüm bileşenlerine uygulayın. Uç nokta olmayanlarblazor için açıkça veya RequireAuthorizationkullanın[Authorize].

  • Dosyadaki /_framework/blazor.server.js uç noktaya Program ekleyin[AllowAnonymous]:

    app.MapBlazorHub().Add(endpointBuilder =>
    {
        if (endpointBuilder is 
            RouteEndpointBuilder
            { 
                RoutePattern: { RawText: "/_framework/blazor.server.js" }
            })
        {
            endpointBuilder.Metadata.Add(new AllowAnonymousAttribute());
        }
    });
    
  • Dosyasının üzerinden geçmesine izin vermek /_framework/blazor.server.js için öğesini HttpContext denetleen bir özel AuthorizationHandler kayıt yapın.

Docker

Docker görüntülerini güncelleştirme

Docker kullanan uygulamalar için Dockerfile FROM deyimlerini ve betiklerini güncelleştirin. ASP.NET Core 8.0 çalışma zamanını içeren bir temel görüntü kullanın. ASP.NET Core 7.0 ile 8.0 arasındaki aşağıdaki docker pull komut farkını göz önünde bulundurun:

- docker pull mcr.microsoft.com/dotnet/aspnet:7.0
+ docker pull mcr.microsoft.com/dotnet/aspnet:8.0

Docker bağlantı noktasını güncelleştirme

.NET kapsayıcı görüntülerinde yapılandırılan varsayılan ASP.NET Core bağlantı noktası 80 numaralı bağlantı noktasından 8080'e güncelleştirildi.

Yeni ASPNETCORE_HTTP_PORTS ortam değişkeni, öğesine ASPNETCORE_URLSdaha basit bir alternatif olarak eklendi.

Daha fazla bilgi için bkz.

Hataya neden olan değişiklikleri gözden geçirme

.NET Core .NET 7.0 ile 8.0 arasında hataya neden olan değişiklikler için bkz. ASP.NET Core ve Entity Framework Core bölümlerini içeren .NET 8'de hataya neden olan değişiklikler.