Aracılığıyla paylaş


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

Bu makalede,.NET 7'de mevcut bir ASP.NET Core projesinin .NET 8'e nasıl güncelleştirilecekleri açıklanmaktadır.

Önkoşullar

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

Eğer belirli bir .NET Core SDK sürümünü hedeflemek için bir global.json dosyası kullanıyorsanız, yüklü olan .NET 8 SDK sürümüne version özelliğini güncelleyin. Ö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.0.0 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 yönergeleri için bkz. ASP.NET Core Razor bileşenlerini MVC veya Razor Sayfalar ile tümleştirme.

Uygulamayı Blazor Server güncelleştirme

.NET 8'de Blazor Web App bileşenlerini kullanmanızı ö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 Blazorsunulan yeni Blazor Web App ö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.
  • Blazor Web App düzenini ve stillerini güncelleyin.

Yeni .NET 8 özellikleri, .NET 8'de ASP.NET Core'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.

Blazor Server uygulamasını Blazor Web App uygulamasına dönüştürme

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 (_Host) içeriği Pages/_Host.cshtml boş App.razor dosyaya taşıyın. Aşağıdaki değişiklikleri App bileşenine yapmaya devam edin.

    Uyarı

    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 IHostEnvironment örneği içeren bir satırla değiştirin.

    @inject IHostEnvironment Env
    

    ~ etiketinden href tilde karakterini kaldırın ve uygulamanızın başlangıç yoluyla <base> öğesini değiştirin.

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

    HeadOutlet bileşeni için Bileşen Etiketi Yardımcısı'nı kaldırın ve yerine HeadOutlet bileşenini ekleyin.

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

    App bileşeni için Bileşen Etiketi Yardımcısı'nı kaldırın ve yerine Routes bileşenini ekleyin.

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

    Uyarı

    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 arabirimi için Çevre 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>
    }
    

    Blazor betiğini blazor.server.js'den blazor.web.js'ye değiştirin:

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

  6. Güncelleme Program.cs:

    Uyarı

    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;
    

    AddServerSideBlazor öğesini AddRazorComponents öğesi ile değiştirin ve AddInteractiveServerComponents öğesine zincirleme bir çağrı yapın.

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

    - builder.Services.AddServerSideBlazor();
    

    Önceki satırı Razor bileşeni ve etkileşimli sunucu bileşeni hizmetleriyle değiştirin. AddRazorComponents çağrılması varsayılan olarak yetkisiz giriş önleyici hizmetler (AddAntiforgery) ekler.

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

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

    - app.MapBlazorHub();
    

    Önceki satırı, MapRazorComponents bileşenini kök bileşen türü olarak sağlayarak App çağrısı ile değiştirin ve AddInteractiveServerRenderMode'ye zincirlenmiş 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();
    

    İstek işleme hattına Sahtekarlık Önleyici Ara Yazılımı ekleyin, HTTPS Yeniden Yönlendirme Ara Yazılımını ekleyen satırdan sonra (app.UseHttpsRedirection).

    app.UseAntiforgery();
    

    Önceki app.UseAntiforgery çağrısı, varsa app.UseAuthentication ve app.UseAuthorization çağrılarından sonra yerleştirilmelidir. Önceden açıklandığı gibi, builder.Services.AddAntiforgery tarafından otomatik olarak eklendiklerinden, hile önleme hizmetlerini (AddRazorComponents) açıkça eklemeye gerek yoktur.

  7. Blazor Server uygulama, önceden oluşturmayı devre dışı bırakacak şekilde yapılandırıldıysa, güncellenmiş uygulama için önceden oluşturmayı devre dışı bırakmaya devam edebilirsiniz. bileşeninde App ve @rendermode bileşenleri için Razor yönerge özniteliklerine HeadOutletRoutes atanan değeri değiştirin.

    @rendermode ve HeadOutlet bileşenleri için Routes yönerge özniteliğinin değerini değiştirerek ön kaydı devre dışı bırakın.

    - @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, .dll benimsenmesini yansıtmak amacıyla dosya uzantısını uygulamanın entegrasyonunda .wasm'den Blazor WebAssembly'ye 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 uygulamayı bir Blazor Web App uygulamaya dönüştürün

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>
    

    Proje dosyasında .Client ayrıca Microsoft.AspNetCore.Components.WebAssembly.DevServer paket başvurusunu kaldırın.

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

    Adını App.razor projesinde .Client'den Routes.razor olarak değiştirin.

    Routes.razor içinde AppAssembly özniteliğinin değerini typeof(Program).Assembly olarak güncelleyin.

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

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

    .Client projesinin _Imports.razor dosyasının bir kopyasını oluşturun ve .Server projesine ekleyin.

  5. App.razor dosyasına aşağıdaki değişiklikleri 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şeni yerleştirin (ön işleme 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)" />
    

    blazor.webassembly.js betiğini blazor.web.js olarak güncelleştirin.

    - <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 (PageTitleyer tutucu) sahip bir {TITLE} bileşen ekleyin:

    <PageTitle>{TITLE}</PageTitle>
    

    Uyarı

    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 kafa içeriğini denetleme.

  7. .Client/Program.cs'dan aşağıdaki satırları kaldırın.

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

    Projeye Razor bileşeni ve etkileşimli WebAssembly bileşeni hizmetlerini ekleyin. Zincirleme bir çağrı yöntemiyle AddRazorComponents ve AddInteractiveWebAssemblyComponents'i çağırın. AddRazorComponents çağrılması varsayılan olarak yetkisiz giriş önleyici hizmetler (AddAntiforgery) ekler.

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

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

    app.UseHttpsRedirection çağrıya sonra aşağıdaki satırı yerleştirin. Çağrı app.UseAntiforgery, varsa app.UseAuthentication ve app.UseAuthorization, çağrılarının ardından yerleştirilmelidir. Önceden açıklandığı gibi, builder.Services.AddAntiforgery tarafından otomatik olarak eklendiklerinden, hile önleme hizmetlerini (AddRazorComponents) açıkça 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 MapRazorComponents bileşenini sağlayan App çağrısıyla değiştirin ve AddInteractiveWebAssemblyRenderMode ve AddAdditionalAssemblies zincirlenmiş çağrılar ekleyin.

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

    Önceki örnekte, {CLIENT APP NAMESPACE} yer tutucu, .Client projesinin ad alanıdır (örneğin, HostedBlazorApp.Client).

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

    Visual Studio için, uygulamayı çalıştırırken .Server projenin seçili olduğunu 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 Blazor Web App'nin yayımıyla birlikte, Blazor hizmet ve uç nokta ayarları, etkileşimli bileşen hizmetleri ve bileşen uç noktası yapılandırması için yeni API tanıtımıyla güncellenir.

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

Yarp yönlendirme geçici çözümüyle Blazor Server'ı kaldırma

Daha önce Yarp ile bir Blazor Server uygulamayı .NET 6 veya .NET başlığı altında yer alan yönergeleri izlediyseniz, makalenin yönergelerini izleyerek uyguladığınız geçici çözüm adımlarını tersine çevirebilirsiniz. Yarp ile Blazor Server için yönlendirme ve derin bağlantı, .NET 8'de doğru şekilde çalışır.

Düzen bileşenlerindeki CascadingValue bileşenlerini taşımak

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ırakan ve .NET 7 veya önceki sürümleri hedefleyen ancak .NET 8 SDK'sı ile oluşturulan uygulamalar için Blazor WebAssembly ile başlayan MSBuild özelliği BlazorEnableCompression, CompressionEnabled olarak değ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 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, AddCascadingAuthenticationState dosyasında Program çağırarak hizmet koleksiyonuna basamaklı kimlik doğrulama durumu hizmetlerini ekleyin.

builder.Services.AddCascadingAuthenticationState();

Daha fazla bilgi 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 (static SSR) ile Razor sınıf kitaplıklarında (RCL) bileşen kitaplığı yazarlığını ele alan yeni bir makale ekledik.

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

Ek derlemelerden bileşenleri bulma

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

Parametre bir sorgu dizesinden sağlandığında [Parameter] özniteliğini kaldırın.

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

- [Parameter]
  [SupplyParameterFromQuery]

Blazor Server betik geri dönüş politikası yetkilendirme

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

.NET 8'de, Blazor Server betiği, uç nokta yönlendirmesi kullanılarak kendi uç noktasından sunulur. Bu değişiklik, Hata düzeltildi - UseStaticFiles’a seçeneklerin geçirilmesi sorun yaratıyor Blazor Server (dotnet/aspnetcore #45897) ile 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 istekler, istek ilkesine ek bir kimlik ekleyen ek bir kimlik doğrulama düzeniyle doğrulanır.
  • Geri dönüş yetkilendirme ilkesi, ek kimlik aracılığıyla talepleri denetleen gereksinimlere sahiptir.

Blazor betik dosyası istekleri (blazor.server.js), çerçevede sabit bir konum olan /_framework/blazor.server.js üzerinde 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, FallbackPolicy RequireAuthenticatedUser (dotnet/aspnetcore 51836) ile çalışmayan MapRazorComponents içinde, Kasım 2024'te çıkması planlanan .NET 9 sürümü için yeni bir çerçeve özelliği olarak 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] niteliğini _Imports.razor dosyasında uygulayarak uygulamanın tüm bileşenlerine uygulayın. Blazor olmayan uç noktalar için açıkça [Authorize] veya RequireAuthorizationkullanın.

  • [AllowAnonymous] dosyasındaki /_framework/blazor.server.js uç noktasına Program ekleyin.

    app.MapBlazorHub().Add(endpointBuilder =>
    {
        if (endpointBuilder is 
            RouteEndpointBuilder
            { 
                RoutePattern: { RawText: "/_framework/blazor.server.js" }
            })
        {
            endpointBuilder.Metadata.Add(new AllowAnonymousAttribute());
        }
    });
    
  • Özel bir AuthorizationHandler'ü kaydederek öğesini HttpContext denetleyen, /_framework/blazor.server.js dosyasının geçmesine izin verin.

Docker

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

Docker kullanan uygulamalar için DockerfileFROM deyimlerini ve betiklerini güncelleştirin. .NET 8 çalışma zamanını içeren bir temel görüntü kullanın. .NET 7'de ASP.NET Core ile .NET 8 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 bakınız:

Önemli değişiklikleri gözden geçirme

.NET 7'den .NET 8'e geçişteki önemli değişiklikler için, .NET 8'deki Önemli Değişiklikler belgesine bakın; bu belge ASP.NET Core ve Entity Framework Core bölümlerini içerir.