ASP.NET Core 2,2 ' den 3,0 ' e geçiş yapın
Scott Ade ve Rick Anderson tarafından
bu makalede, mevcut bir ASP.NET Core 2,2 projesinin ASP.NET Core 3,0 ' e nasıl güncelleştirilmesi açıklanmaktadır. yeni bir ASP.NET Core 3,0 projesi oluşturmak yararlı olabilir:
- ASP.NET Core 2,2 kodla karşılaştırın.
- ilgili değişiklikleri ASP.NET Core 3,0 projenize kopyalayın.
Önkoşullar
- ASP.net ve Web geliştirme iş yüküyle Visual Studio 2019
- .NET Core 3,0 SDK
global.jsüzerinde .NET Core SDK sürümü Güncelleştir
Çözümünüz belirli bir .NET Core SDK sürümünü hedeflemek için dosyadaki bir global.js kullanıyorsa, version özelliğini makinenizde yüklü 3,0 sürümü olarak güncelleştirin:
{
"sdk": {
"version": "3.0.100"
}
}
Proje dosyasını güncelleştirme
Hedef çerçeveyi güncelleştirme
ASP.NET Core 3,0 ve üzeri yalnızca .net Core üzerinde çalışır. Hedef Framework bilinen adını (tfd) şu şekilde ayarlayın netcoreapp3.0 :
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>netcoreapp3.0</TargetFramework>
</PropertyGroup>
</Project>
Kullanımdan kaldırılmış paket başvurularını kaldır
ASP.NET Core 3,0 için çok sayıda NuGet paketi üretilmez. Bu tür paket başvuruları proje dosyasından kaldırılmalıdır. ASP.NET Core 2,2 web uygulaması için aşağıdaki proje dosyasını göz önünde bulundurun:
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>netcoreapp2.2</TargetFramework>
<AspNetCoreHostingModel>InProcess</AspNetCoreHostingModel>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.App"/>
<PackageReference Include="Microsoft.AspNetCore.Razor.Design" Version="2.2.0" PrivateAssets="All" />
</ItemGroup>
</Project>
ASP.NET Core 3,0 için güncelleştirilmiş proje dosyası:
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>netcoreapp3.0</TargetFramework>
</PropertyGroup>
</Project>
güncelleştirilmiş ASP.NET Core 3,0 proje dosyası:
İçinde
<PropertyGroup>:- TFD 'yi güncelleştirme
netcoreapp3.0 - Öğeyi kaldırır
<AspNetCoreHostingModel>. Daha fazla bilgi için bu belgede Işlem içi barındırma modeli konusuna bakın.
- TFD 'yi güncelleştirme
İçinde
<ItemGroup>:Microsoft.AspNetCore.Appkaldırılır. Daha fazla bilgi için bu belgede Framework başvurusu bölümüne bakın.Microsoft.AspNetCore.Razor.Designkaldırılır ve aşağıdaki paket listesinde artık üretilmez.
Artık üretilmeyen paketlerin tam listesini görmek için aşağıdaki Genişlet listesini seçin:
Artık üretilmeyen paketlerin listesini genişletmek için tıklayın
- Microsoft.AspNetCore
- Microsoft.AspNetCore.All
- Microsoft.AspNetCore.App
- Microsoft.AspNetCore.Antiforgery
- Microsoft.AspNetCore.Authentication
- Microsoft.AspNetCore.Authentication.Abstractions
- Microsoft. AspNetCore. Authentication. Cookie malar
- Microsoft.AspNetCore.Authentication.Core
- Microsoft.AspNetCore.Authentication.OAuth
- Microsoft.AspNetCore.Authorization.Policy
- Microsoft. AspNetCore. Cookie İlkesinin
- Microsoft.AspNetCore.Cors
- Microsoft.AspNetCore.Diagnostics
- Microsoft.AspNetCore.Diagnostics.HealthChecks
- Microsoft.AspNetCore.HostFiltering
- Microsoft.AspNetCore.Hosting
- Microsoft.AspNetCore.Hosting.Abstractions
- Microsoft.AspNetCore.Hosting.Server.Abstractions
- Microsoft.AspNetCore.Http
- Microsoft.AspNetCore.Http.Abstractions
- Microsoft.AspNetCore.Http.Connections
- Microsoft.AspNetCore.Http.Extensions
- Microsoft.AspNetCore.HttpOverrides
- Microsoft.AspNetCore.HttpsPolicy
- Microsoft. AspNetCore.Identity
- Microsoft.AspNetCore.Localization
- Microsoft.AspNetCore.Localization.Routing
- Microsoft.AspNetCore.Mvc
- Microsoft.AspNetCore.Mvc.Abstractions
- Microsoft.AspNetCore.Mvc.Analyzers
- Microsoft.AspNetCore.Mvc.ApiExplorer
- Microsoft.AspNetCore.Mvc.Api.Analyzers
- Microsoft.AspNetCore.Mvc.Core
- Microsoft.AspNetCore.Mvc.Cors
- Microsoft.AspNetCore.Mvc.DataAnnotations
- Microsoft.AspNetCore.Mvc.Formatters.Json
- Microsoft.AspNetCore.Mvc.Formatters.Xml
- Microsoft.AspNetCore.Mvc.Localization
- Microsoft. AspNetCore. Mvc.Razor
- Microsoft. AspNetCore. Mvc. Razor . ViewCompilation
- Microsoft. AspNetCore. Mvc. Razor Sayfaları
- Microsoft.AspNetCore.Mvc.TagHelpers
- Microsoft.AspNetCore.Mvc.ViewFeatures
- Microsoft. AspNetCore.Razor
- Microsoft. AspNetCore. Razor . Çalışma zamanı
- Microsoft. AspNetCore. Razor . Tasarıma
- Microsoft.AspNetCore.ResponseCaching
- Microsoft.AspNetCore.ResponseCaching.Abstractions
- Microsoft.AspNetCore.ResponseCompression
- Microsoft.AspNetCore.Rewrite
- Microsoft.AspNetCore.Routing
- Microsoft.AspNetCore.Routing.Abstractions
- Microsoft.AspNetCore.Server.HttpSys
- Microsoft.AspNetCore.Server.IIS
- Microsoft.AspNetCore.Server.IISIntegration
- Microsoft. AspNetCore. Server.Kestrel
- Microsoft. AspNetCore. Server. Kestrel . Çekirdeğin
- Microsoft. AspNetCore. Server. Kestrel . 'Dir
- Microsoft. AspNetCore. Server. Kestrel . Taşıma. soyutlamalar
- Microsoft. AspNetCore. Server. Kestrel . Transport. Sockets
- Microsoft.AspNetCore.Session
- Microsoft. AspNetCore.SignalR
- Microsoft. AspNetCore. SignalR . Çekirdeğin
- Microsoft.AspNetCore.StaticFiles
- Microsoft.AspNetCore.WebSockets
- Microsoft.AspNetCore.WebUtilities
- Microsoft.Net.Http.Headers
Yeni değişiklikleri gözden geçirme
Yeni değişiklikleri gözden geçirme
Çerçeve başvurusu
Yukarıda ASP.NET Core paketlerden biri aracılığıyla kullanılabilen diğer özelliklerin özellikleri paylaşılan çerçevenin bir Microsoft.AspNetCore.App parçası olarak kullanılabilir. Paylaşılan çerçeve, makineye yüklenmiş ve bir çalışma zamanı bileşeni ve bir hedefleme paketi içeren derlemeler kümesidir (.dlldosyaları). Daha fazla bilgi için bkz. Paylaşılan çerçeve.
SDK'yı
Microsoft.NET.Sdk.Webhedef alan projeler çerçeveye örtülü olarakMicrosoft.AspNetCore.Appbaşvurur.Bu projeler için ek başvuru gerekmez:
<Project Sdk="Microsoft.NET.Sdk.Web"> <PropertyGroup> <TargetFramework>netcoreapp3.0</TargetFramework> </PropertyGroup> ... </Project>veya
Microsoft.NET.SdkMicrosoft.NET.Sdk.RazorSDK'yı hedef alan projeler için açıkFrameworkReferenceMicrosoft.AspNetCore.Appeklemeli:<Project Sdk="Microsoft.NET.Sdk.Razor"> <PropertyGroup> <TargetFramework>netcoreapp3.0</TargetFramework> </PropertyGroup> <ItemGroup> <FrameworkReference Include="Microsoft.AspNetCore.App" /> </ItemGroup> ... </Project>
Docker kullanan çerçeveye bağımlı derlemeler
Paylaşılan çerçeveye bağlı bir paket kullanan konsol uygulamalarının çerçeveye bağımlı derlemeleri ASP.NET Core çalışma zamanı hatasına neden olabilir:
It was not possible to find any compatible framework version
The specified framework 'Microsoft.AspNetCore.App', version '3.0.0' was not found.
- No frameworks were found.
Microsoft.AspNetCore.App, çalışma zamanı ASP.NET Core paylaşılan çerçevedir ve yalnızca dotnet/core/aspnet Docker görüntüsünde mevcuttur. 3.0 SDK, paylaşılan çerçevede kullanılabilir kitaplıkların yinelenen kopyalarını dahil ASP.NET Core kullanarak çerçeveye bağımlı derlemelerin boyutunu azaltır. Bu, 18 MB'a kadar olası bir tasarruf sağlar, ancak uygulamayı çalıştırmak için ASP.NET Core çalışma zamanının mevcut / yüklü olması gerekir.
Uygulamanın paylaşılan çerçevede bağımlılık (doğrudan veya dolaylı) ASP.NET Core belirlemek için, runtimeconfig.js derleme/yayımlama sırasında oluşturulan dosyada yer alanruntimeconfig.jsdosyasını inceleme. Aşağıdaki JSON dosyası, paylaşılan çerçevenin ASP.NET Core gösterir:
{
"runtimeOptions": {
"tfm": "netcoreapp3.0",
"framework": {
"name": "Microsoft.AspNetCore.App",
"version": "3.0.0"
},
"configProperties": {
"System.GC.Server": true
}
}
}
Uygulamanız Docker kullanıyorsa, 3.0'ı ASP.NET Core temel bir görüntü kullanın. Örneğin, docker pull mcr.microsoft.com/dotnet/core/aspnet:3.0.
Kaldırılan derlemeler için paket başvuruları ekleme
ASP.NET Core 3.0, paket başvurusunda daha önce yer alan bazı Microsoft.AspNetCore.App derlemeleri kaldırır. Hangi derlemelerin kaldırılmış olduğunu görselleştirmek için iki paylaşılan çerçeve klasörünü karşılaştırın. Örneğin, 2.2.7 ve 3.0.0 sürümlerinin karşılaştırması:

Kaldırılan derlemeler tarafından sağlanan özellikleri kullanmaya devam etmek için ilgili paketlerin 3.0 sürümlerine bakın:
Bireysel Kullanıcı Hesapları ile şablon tarafından oluşturulan bir web uygulaması aşağıdaki paketlerin eksini gerektirir:
<Project Sdk="Microsoft.NET.Sdk.Web"> <PropertyGroup> <TargetFramework>netcoreapp3.0</TargetFramework> <UserSecretsId>My-secret</UserSecretsId> </PropertyGroup> <ItemGroup> <PackageReference Include="Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore" Version="3.0.0" /> <PackageReference Include="Microsoft.AspNetCore.Identity.EntityFrameworkCore" Version="3.0.0" /> <PackageReference Include="Microsoft.AspNetCore.Identity.UI" Version="3.0.0" /> <PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="3.0.0" /> <PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="3.0.0" /> </ItemGroup> </Project>-
Veritabanı sağlayıcısına özgü pakete başvuru hakkında daha fazla bilgi için bkz. Veritabanı Sağlayıcıları.
Identity UI
Kullanıcı Identity arabirimi desteği, Microsoft.AspNetCore.'a başvurarak Identity eklenebilir. . UI paketi.
SPA Hizmetleri
Kimlik doğrulaması: Üçüncü taraf kimlik doğrulama akışları için destek, NuGet kullanılabilir:
- Facebook OAuth (Microsoft.AspNetCore.Authentication.Facebook)
- Google OAuth (Microsoft.AspNetCore.Authentication.Google)
- Microsoft Hesabı kimlik doğrulaması (Microsoft.AspNetCore.Authentication.MicrosoftAccount)
- OpenID Bağlan doğrulaması (Microsoft.AspNetCore.Authentication.OpenIdConnect)
- OpenID Bağlan taşıyıcı belirteci (Microsoft.AspNetCore.Authentication.JwtBearer)
- Twitter OAuth (Microsoft.AspNetCore.Authentication.Twitter)
- WsFederation kimlik doğrulaması (Microsoft.AspNetCore.Authentication.WsFederation)
için biçimlendirme ve içerik anlaşması
System.Net.HttpClientdesteği: Microsoft.AspNet.WebApi.Client NuGet paketi, ve gibi API'lerle için kullanışlıSystem.Net.HttpClientgenişletilebilirlikReadAsAsyncPostJsonAsyncsağlar.Razor çalışma zamanı derlemesi: Görünüm ve sayfaların çalışma zamanı derlemesi desteği Razor artık Microsoft.AspNetCore.Mvc.'nin bir parçası. Razor . RuntimeCompilation.
MVC
Newtonsoft.Json(Json.NET) desteği: ile MVC kullanma desteğiNewtonsoft.JsonartıkMicrosoft.AspNetCore.Mvc.NewtonsoftJsonkapsamındadır.
Başlangıç değişiklikleri
Aşağıdaki görüntüde, ASP.NET Core 2.2 Pages Web uygulamasında silinen Razor ve değiştirilen satırlar yer almaktadır:

Yukarıdaki görüntüde silinen kod kırmızı renkle gösterilmiştir. Silinen kod, dosyaları cookie karşılaştırmadan önce silinmiş olan seçenek kodunu göstermez.
Aşağıdaki görüntüde, ASP.NET Core 3.0 Pages Web uygulamasında eklenen ve Razor değiştirilen satırlar görüntülenmiştir:

Yukarıdaki görüntüde eklenen kod yeşil renkle gösterilmiştir. Aşağıdaki değişiklikler hakkında bilgi için:
services.AddMvciçin,services.AddRazorPagesbu belgede MVC hizmet kaydına bakın.CompatibilityVersion, ASP.NET Core MVC için uyumluluk sürümü bkz. .IHostingEnvironmentiçin,IWebHostEnvironmentbu GitHub bakın.app.UseAuthorization, sipariş yetkilendirme ara yazılımı eklenmek zorunda olduğunu göstermek için şablonlara eklendi. Uygulama yetkilendirmeyi kullanamasa, çağrısını güvenli bir şekildeapp.UseAuthorizationkaldırabilirsiniz.app.UseEndpoints, Razor bkz. Bu Startup.Configsayfaları geçirme.
Çözümleyici desteği
Daha önce Microsoft.NET.Sdk.Web Microsoft.AspNetCore.Mvc.Analyzers paketinin bir parçası olarak gönderilen örtülü başvuru çözümleyicilerini hedef alan projeler. Bunları etkinleştirmek için ek başvuru gerekmez.
Uygulamanız daha önce Microsoft.AspNetCore.Mvc.Api.Analyzers paketi kullanılarak gönderilen API çözümleyicilerini kullanıyorsa, proje dosyanızı .NET Core Web SDK'sı kapsamında gönderilen çözümleyicilere başvuracak şekilde düzenleyin:
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>netcoreapp3.0</TargetFramework>
<IncludeOpenAPIAnalyzers>true</IncludeOpenAPIAnalyzers>
</PropertyGroup>
...
</Project>
Razor Sınıf Kitaplığı
Razor MVC için kullanıcı arabirimi bileşenleri sağlayan Sınıf Kitaplığı projelerinin proje AddRazorSupportForMvc dosyasında özelliğini ayarlaması gerekir:
<PropertyGroup>
<AddRazorSupportForMvc>true</AddRazorSupportForMvc>
</PropertyGroup>
İşlem içinde barındırma modeli
Projeler, ASP.NET Core 3.0 veya sonraki bir ASP.NET Core işlem için barındırma modelini varsayılan olarak kullanır. değeri ise, <AspNetCoreHostingModel> isteğe bağlı olarak proje dosyasındaki özelliğini kaldırabilirsiniz. InProcess
Kestrel
Yapılandırma
Tarafından Kestrel sağlanan web ana bilgisayar oluşturucusu için yapılandırmayı geçirme ( ConfigureWebHostDefaults Program.cs):
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.ConfigureKestrel(serverOptions =>
{
// Set properties and call methods on options
})
.UseStartup<Startup>();
});
Uygulama, yerine ile konak ConfigureWebHost ConfigureWebHostDefaults oluşturursa, web ana bilgisayar UseKestrel oluşturucus üzerinde çağrısı yapabilirsiniz:
public static void Main(string[] args)
{
var host = new HostBuilder()
.UseContentRoot(Directory.GetCurrentDirectory())
.ConfigureWebHost(webBuilder =>
{
webBuilder.UseKestrel(serverOptions =>
{
// Set properties and call methods on options
})
.UseIISIntegration()
.UseStartup<Startup>();
})
.Build();
host.Run();
}
Bağlantı Ara Yazılımı, Bağlantı Bağdaştırıcıları'nın yerini alıyor
Bağlantı Bağdaştırıcıları ( Microsoft.AspNetCore.Server.Kestrel.Core.Adapter.Internal.IConnectionAdapter ) 'den Kestrel kaldırıldı. Bağlantı Bağdaştırıcılarını Bağlantı Ara Yazılımı ile değiştirin. Bağlantı Ara Yazılımı, bağlantı hattında http ara yazılımına ASP.NET Core alt düzey bağlantılar için kullanılır. HTTPS ve bağlantı günlüğü:
- Bağlantı Bağdaştırıcılarından Bağlantı Ara Yazılımına taşındı.
- Bu uzantı yöntemleri, önceki sürümlerde olduğu gibi ASP.NET Core.
Daha fazla bilgi için makalenin ListenOptions.Protocols bölümündeki TlsFilterConnectionHandler örneğine Kestrel bakın.
Taşıma soyutlamaları taşındı ve genel yapıldı
Aktarım Kestrel katmanı içinde genel arabirim olarak ortaya Connections.Abstractions çıktı. Bu güncelleştirmelerin bir parçası olarak:
Microsoft.AspNetCore.Server.Kestrel.Transport.Abstractionsve ilişkili türler kaldırıldı.- NoDelay taşıma ListenOptions seçeneklerine taşındı.
Microsoft.AspNetCore.Server.Kestrel.Transport.Abstractions.Internal.SchedulingMode, 'den KestrelServerOptions kaldırıldı.
Daha fazla bilgi için aşağıdaki kaynak GitHub bakın:
- İstemci/sunucu ağ soyutlamaları (dotnet/AspNetCore #10308)
- Üstte yenirock dinleyici soyutlama ve yeniden plat Kestrel uygulama (dotnet/AspNetCore #10321)
Kestrel Tanıtım üst bilgileri isteği
Önceki sürümlerini hedef alan uygulamalar için ASP.NET Core:
- Kestrel http/1.1 öbekli tanıtım üst bilgilerini istek üst bilgileri koleksiyonuna ekler.
- İstek gövdesi en sona okunduktan sonra tanıtımlar kullanılabilir.
Bu, üst bilgiler ve fragmanlar arasındaki belirsizlikle ilgili bazı endişelere neden olur. Bu nedenle, RequestTrailerExtensions 3.0'da tırlar yeni bir koleksiyona ( ) taşındı.
HTTP/2 istek tanıtımları:
- ASP.NET Core 2.2'de kullanılamaz.
- olarak 3.0'da
RequestTrailerExtensionskullanılabilir.
Bu tanıtımlara erişmek için yeni istek uzantısı yöntemleri mevcuttur. HTTP/1.1'de olduğu gibi, istek gövdesi sona okunduktan sonra tanıtımlar kullanılabilir.
3.0 sürümü için aşağıdaki RequestTrailerExtensions yöntemler kullanılabilir:
GetDeclaredTrailers: Gövdeden sonraTrailerhangi tanıtımların beklediğinizi listeleten istek üst bilgilerini alır.SupportsTrailers: İsteğin, tanıtım üst bilgilerini almayı destekleyip desteklemey aldığını gösterir.CheckTrailersAvailable: İsteğin tanıtımları destekleyip desteklemediylerini ve okunabilir olup olduklarını denetler. Bu denetim, okunan tanıtımların olduğunu varsaymaz. Bu yöntem tarafından döndürülse bile okunantruebir tanıtım olabilir.GetTrailer: Yanıttan istenen sondaki üst bilgiyi alır. çağrısından önce kontrol edin veya istek sondaki üst bilgileriSupportsTrailersGetTrailerNotSupportedException desteklemezse bir oluşabilir.
Daha fazla bilgi için bkz. İstek tanıtımlarını ayrı bir koleksiyona (dotnet/AspNetCore #10410) koyma.
AllowSynchronousIO devre dışı
AllowSynchronousIO , ve gibi zaman uyumlu I/O API'lerini etkinleştiriyor veya HttpRequest.Body.Read devre HttpResponse.Body.Write dışı Stream.Flush bırakıyor. Bu API'ler uygulama kilitlenmelerinin yol aç olduğu bir iş parçacığı kaynağıdır. 3.0'da AllowSynchronousIO varsayılan olarak devre dışıdır. Daha fazla bilgi için makalenin Zaman Uyumlu I/O bölümüne Kestrel bakın.
Zaman uyumlu bir I/O gerekli ise, kullanılan sunucuda seçeneği yapılandırarak AllowSynchronousIO etkinleştirilebilir ConfigureKestrel (örneğin, Kestrel kullanılıyorsa) çağrılır. Sunucuların ( Kestrel , HttpSys, TestServer vb.) diğer sunucuları etkilemeyebilirsiniz. AllowSynchronousIO Zaman uyumlu I/O seçeneği kullanılarak istek başına tüm sunucular için IHttpBodyControlFeature.AllowSynchronousIO etkinleştirilebilir:
var syncIOFeature = HttpContext.Features.Get<IHttpBodyControlFeature>();
if (syncIOFeature != null)
{
syncIOFeature.AllowSynchronousIO = true;
}
Dispose içinde zaman uyumlu API'leri çağıran uygulamalar veya diğer akışlarla ilgili sorun TextWriter varsa, bunun yerine yeni DisposeAsync API'yi çağırabilirsiniz.
Daha fazla bilgi için bkz. [Duyuru] AllowSynchronousIO tüm sunucularda devre dışı bırakıldı (dotnet/AspNetCore #7644).
Çıkış biçimlendiren arabelleğe alma
Newtonsoft.Js,ve XmlSerializer tabanlı DataContractSerializer çıkış biçimlendirenler yalnızca zaman uyumlu serileştirmeyi destekler. MVC, bu biçimlendirenlerin sunucunun AllowSynchronousIO kısıtlamalarıyla çalışmasına izin vermek için diske yazmadan önce bu biçimlendirenlerin çıkışını arabelleğe verir. Arabelleğe alma sonucunda MVC, bu biçimlendirenleri kullanarak yanıt verirken Content-Length üst bilgilerini içerir.
System.Text.Json zaman uyumsuz serileştirmeyi destekler ve bunun sonucunda System.Text.Json tabanlı biçimlendirıcı arabelleğe almaz. Gelişmiş performans için bu biçimlendirıcıyı kullanmayı göz önünde bulundurabilirsiniz.
Uygulamalar arabelleğe alma özelliğini devre dışı bırakmak için SuppressOutputFormatterBuffering başlangıçta şunları yapılandırabilirsiniz:
services.AddControllers(options => options.SuppressOutputFormatterBuffering = true)
Bunun, uygulamanın yapılandırılmamışsa bir çalışma zamanı özel durumuna AllowSynchronousIO neden olduğunu unutmayın.
Microsoft.AspNetCore.Server. Kestrel . Https derlemesi kaldırıldı
2.1 ASP.NET Core de, Microsoft.AspNetCore.Server. Kestrel.Https.dll içeriği Microsoft.AspNetCore.Server. Kestrel.Core.dll.. Bu, öznitelikleri kullanan, yeni bir TypeForwardedTo güncelleştirmedir. 3.0 için boş Microsoft.AspNetCore.Server. Kestrel.Https.dll derlemesi ve NuGet paketi kaldırıldı.
Microsoft.AspNetCore.Server'a başvuran kitaplıklar. Kestrel . Https, ASP.NET Core 2.1 veya sonraki bir güncelleştirmesi gerekir.
ASP.NET Core 2.1 veya sonraki bir sürümü hedef alan uygulamalar ve kitaplıklar, Microsoft.AspNetCore.Server'a yönelik doğrudan başvuruları kaldırmalı. Kestrel . Https paketi.
Newtonsoft.Js(Json.NET) desteği
ASP.NET Core paylaşılan çerçevesini geliştirmeyeNewtonsoft.Jsçalışması kapsamında ,Newtonsoft.Js(Json.NET) paylaşılan çerçeveden ASP.NET Core kaldırılmıştır.
ASP.NET Core için varsayılan JSON seri hale getiricisi artık System.Text.Json .NET Core 3.0'da yeni olan 'tır. Mümkün olduğunda System.Text.Json kullanmayı göz önünde bulundurarak. Yüksek performanslıdır ve ek bir kitaplık bağımlılığı gerektirmez. Ancak, System.Text.Json yeni olduğu için, şu anda uygulamanıza gereken özellikler eksik olabilir. Daha fazla bilgi için bkz. Newtonsoft.Js'den System.Text.Js.
ASP.NET Core 3.0 projesinde Newtonsoft.Js'i SignalR kullanma
Microsoft.AspNetCore.'u yükleyin. SignalR . Protocols.NewtonsoftJson NuGet paketi.
İstemcide, bir yöntem
AddNewtonsoftJsonProtocolçağrısını örneğineHubConnectionBuilderzincirleme:new HubConnectionBuilder() .WithUrl("/chathub") .AddNewtonsoftJsonProtocol(...) .Build();sunucusunda, içinde yöntem
AddNewtonsoftJsonProtocolçağrısına birAddSignalRyöntem çağrısıStartup.ConfigureServiceszincirleme:services.AddSignalR() .AddNewtonsoftJsonProtocol(...);
ASP.NET Core 3.0 MVC projesinde Newtonsoft.Js'yi kullanma
Paketini
Microsoft.AspNetCore.Mvc.NewtonsoftJsonyükleyin.çağrısı
Startup.ConfigureServicesyapmak içinAddNewtonsoftJsongüncelleştirin.services.AddMvc() .AddNewtonsoftJson();AddNewtonsoftJsonyeni MVC hizmeti kayıt yöntemleriyle uyumludur:AddRazorPagesAddControllersWithViewsAddControllers
services.AddControllers() .AddNewtonsoftJson();Newtonsoft.Jsonayarları çağrısında ayarAddNewtonsoftJsonolabilir:services.AddMvc() .AddNewtonsoftJson(options => options.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver());Not: yöntemi
AddNewtonsoftJsonkullanılamıyorsa paketin yüklü olduğundan eminMicrosoft.AspNetCore.Mvc.NewtonsoftJsonolun. Sık karşılaşılan bir hata, Newtonsoft.Jsyerine paketeMicrosoft.AspNetCore.Mvc.NewtonsoftJsonyüklemektir.
Daha fazla bilgi için bkz. Newtonsoft.Jstabanlı JSON biçimi desteği ekleme.
MVC hizmeti kaydı
ASP.NET Core 3.0, içinde MVC senaryolarını kaydetmek için yeni seçenekler Startup.ConfigureServices ekler.
üzerinde MVC senaryolarıyla ilgili üç yeni üst düzey genişletme IServiceCollection yöntemi mevcuttur. Şablonlar yerine bu yeni yöntemleri AddMvc kullanır. Ancak, AddMvc önceki sürümlerde olduğu gibi davranmaya devam eder.
Aşağıdaki örnek denetleyiciler ve API ile ilgili özellikler için destek ekler, ancak görünümler veya sayfalar için destek eklemez. API şablonu şu kodu kullanır:
public void ConfigureServices(IServiceCollection services)
{
services.AddControllers();
}
Aşağıdaki örnek denetleyiciler, API ile ilgili özellikler ve görünümler için destek ekler, ancak sayfalar için destek eklemez. Web Uygulaması (MVC) şablonu şu kodu kullanır:
public void ConfigureServices(IServiceCollection services)
{
services.AddControllersWithViews();
}
Aşağıdaki örnek, Sayfalar ve minimum Razor denetleyici desteği için destek ekler. Web Uygulaması şablonu şu kodu kullanır:
public void ConfigureServices(IServiceCollection services)
{
services.AddRazorPages();
}
Yeni yöntemler de birleştirilmiş olabilir. Aşağıdaki örnek, AddMvc 2.2'de ASP.NET Core eşdeğerdir:
public void ConfigureServices(IServiceCollection services)
{
services.AddControllersWithViews();
services.AddRazorPages();
}
Yönlendirme başlangıç kodu
Bir uygulama veya UseMvc çağrısında UseSignalR bulundursa, mümkünse uygulamayı Uç Nokta Yönlendirme'ye geçirebilirsiniz. Önceki MVC sürümleriyle Endpoint Routing uyumluluğunu geliştirmek için, ASP.NET Core 2.2'de tanıtmış olan URL oluşturma değişikliklerini geri döndürmüştük. 2.2'de Uç Nokta Yönlendirmeyi kullanırken sorun yaşadıysanız, aşağıdaki özel durumlar dışında ASP.NET Core 3.0'da geliştirmeler beklersiniz:
- Uygulama uygulamasından uygulama veya
IRouterdevralıyorsa,Routedeğiştirme olarak DynamicRouteValuesTransformer kullanın. - Uygulama URL'leri ayrıştırmak için MVC'nin içine doğrudan erişıyorsa,
RouteData.Routersbunu LinkParser.ParsePathByEndpointName ile değiştirebilirsiniz.- Yolu bir yol adıyla tanımlayın.
- kullanın
LinkParser.ParsePathByEndpointNameve istenen yol adını girin.
Uç Nokta Yönlendirme, ile aynı yol deseni söz dizimi ve yol deseni yazma özelliklerini IRouter destekler. Uç Nokta Yönlendirme desteği IRouteConstraint sağlar. Uç nokta [Route] yönlendirmesi [HttpGet] , ve diğer MVC yönlendirme özniteliklerini destekler.
Çoğu uygulama için yalnızca Startup değişiklik gerekir.
Geçiş Startup.Configure
Genel öneri:
UseRoutingekleyin.Uygulama çağrısında
UseStaticFilesbulundurarak önceUseStaticFilesyerine bir yer açın.UseRoutingUygulama veya gibi kimlik doğrulaması/yetkilendirme özellikleri kullanıyorsa, ve : çağrısını , ve 'den
AuthorizePage[Authorize]sonra ancakUseAuthenticationUseAuthorizationUseRoutingUseCorsöncesine yerUseEndpointsedin:public void Configure(IApplicationBuilder app) { ... app.UseStaticFiles(); app.UseRouting(); app.UseCors(); app.UseAuthentication(); app.UseAuthorization(); app.UseEndpoints(endpoints => { endpoints.MapControllers(); });veya
UseMvcyerineUseSignalR.UseEndpointsUygulama gibi CORS senaryolarını kullanıyorsa, çağrısını CORS kullanan başka bir ara yazılımdan
[EnableCors]önce (örneğin, , veUseCorsUseCorsöncesinde)UseAuthenticationyerine yerUseAuthorizationUseEndpointsalır.yerine
IHostingEnvironmentad alanı için bir deyimiIWebHostEnvironmentusingMicrosoft.Extensions.Hosting ekleyin.yerine
IApplicationLifetimeIHostApplicationLifetime ( ad Microsoft.Extensions.Hosting alanı) ekleyin.yerine
EnvironmentNameEnvironments ( ad Microsoft.Extensions.Hosting alanı) ekleyin.
Aşağıdaki kod, tipik bir ASP.NET Core Startup.Configure 2.2 uygulamasındaki bir örneğidir:
public void Configure(IApplicationBuilder app)
{
...
app.UseStaticFiles();
app.UseAuthentication();
app.UseSignalR(hubs =>
{
hubs.MapHub<ChatHub>("/chat");
});
app.UseMvc(routes =>
{
routes.MapRoute("default", "{controller=Home}/{action=Index}/{id?}");
});
}
Önceki kodu güncelleştirdikten Startup.Configure sonra:
public void Configure(IApplicationBuilder app)
{
...
app.UseStaticFiles();
app.UseRouting();
app.UseCors();
app.UseAuthentication();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapHub<ChatHub>("/chat");
endpoints.MapControllerRoute("default", "{controller=Home}/{action=Index}/{id?}");
});
}
Uyarı
Çoğu uygulama için, UseAuthentication etkili olması için ve çağrıları arasında , ve çağrıları görün UseAuthorization UseCors UseRouting UseEndpoints gerekir.
Sistem durumu denetimleri
Sistem Durumu Denetimleri, Genel Ana Bilgisayar ile uç nokta yönlendirmeyi kullanır. içinde, Startup.Configure uç MapHealthChecks nokta URL'si veya göreli yolu ile uç nokta oluşturucusu üzerinde çağrısı:
app.UseEndpoints(endpoints =>
{
endpoints.MapHealthChecks("/health");
});
Sistem Durumu Denetimleri uç noktaları şunları sağlar:
- İzin verilen bir veya daha fazla konak/bağlantı noktası belirtin.
- Yetkilendirme gerektir.
- CORS gerektir.
Daha fazla bilgi için bkz. ASP.NET Core'da sistem durumu denetimleri.
Güvenlik ara yazılımı kılavuzu
Yetkilendirme ve CORS desteği, ara yazılım yaklaşımı etrafında birleştirilmiştir. Bu, bu senaryolarda aynı ara yazılımların ve işlevlerin kullanımına olanak sağlar. Bu sürümde güncelleştirilmiş yetkilendirme ara yazılımı sağlanmıştır ve CORS Ara Yazılımı, MVC denetleyicileri tarafından kullanılan öznitelikleri anlayacaktır.
CORS
Daha önce CORS yapılandırması zor olabilir. Ara yazılım bazı kullanım durumlarında kullanılmak üzere sağlandı, ancak MVC filtrelerinin diğer kullanım durumlarında ara yazılım olmadan kullanılması amaçlandı. ASP.NET Core 3,0 ile, cors gerektiren tüm uygulamaların, uç nokta yönlendirme ile birlikte cors ara yazılımını kullanması önerilir. UseCors , varsayılan bir ilkeyle ve [EnableCors] [DisableCors] gerekli olduğunda varsayılan ilkeyi geçersiz kılmak için öznitelikler kullanılabilir.
Aşağıdaki örnekte:
- CORS, adlandırılmış ilkeye sahip tüm uç noktalar için etkinleştirilmiştir
default. MyControllerSınıfı, CORS 'yi özniteliğiyle devre dışı bırakır[DisableCors].
public void Configure(IApplicationBuilder app)
{
...
app.UseRouting();
app.UseCors("default");
app.UseEndpoints(endpoints =>
{
endpoints.MapDefaultControllerRoute();
});
}
[DisableCors]
public class MyController : ControllerBase
{
...
}
Yetkilendirme
ASP.NET Core önceki sürümlerinde, yetkilendirme desteği özniteliği aracılığıyla sağlandı [Authorize] . Yetkilendirme ara yazılımı kullanılamıyor. ASP.NET Core 3,0 ' de, yetkilendirme ara yazılımı gereklidir. ASP.NET Core yetkilendirmesi ara yazılımını ( UseAuthorization ) hemen sonra yerleştirmenizi öneririz UseAuthentication . Yetkilendirme ara yazılımı, geçersiz kılınabilen varsayılan ilkeyle de yapılandırılabilir.
ASP.NET Core 3,0 veya üzeri sürümlerde ' de UseAuthorization çağrılır Startup.Configure ve aşağıdakiler HomeController oturum açmış bir kullanıcı gerektirir:
public void Configure(IApplicationBuilder app)
{
...
app.UseRouting();
app.UseAuthentication();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapDefaultControllerRoute();
});
}
public class HomeController : Controller
{
[Authorize]
public IActionResult BuyWidgets()
{
...
}
}
Endpoint Routing kullanırken, AuthorizeFilter Yetkilendirme ara yazılımını yapılandırmak ve bunun yerine güvenmek önerilir. Uygulama, AuthorizeFilter MVC 'de genel bir filtre olarak kullanıyorsa, çağrısına bir ilke sağlamak için kodu yeniden düzenlemeyi öneririz AddAuthorization .
DefaultPolicyBaşlangıçta kimlik doğrulaması gerektirecek şekilde yapılandırıldığında, ek yapılandırma gerekmez. Aşağıdaki örnekte, MVC uç noktaları RequireAuthorization , tüm isteklerin öğesine göre yetkilendirilmiş olması için olarak işaretlenir DefaultPolicy . Bununla birlikte, HomeController Kullanıcı uygulamada oturum açmadan erişime izin verir, çünkü [AllowAnonymous] :
public void Configure(IApplicationBuilder app)
{
...
app.UseRouting();
app.UseAuthentication();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapDefaultControllerRoute().RequireAuthorization();
});
}
[AllowAnonymous]
public class HomeController : Controller
{
...
}
Belirli uç noktalar için yetkilendirme
Yetkilendirme, belirli uç nokta sınıfları için de yapılandırılabilir. Aşağıdaki kod, AuthorizeFilter yetkilendirme gerektiren belirli bir ilkeye sahip bir uygulamaya küresel olarak yapılandırılmış BIR MVC uygulamasını dönüştürme örneğidir:
public class Startup
{
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
static readonly string _RequireAuthenticatedUserPolicy =
"RequireAuthenticatedUserPolicy";
public IConfiguration Configuration { get; }
public void ConfigureServices(IServiceCollection services)
{
services.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(
Configuration.GetConnectionString("DefaultConnection")));
services.AddDefaultIdentity<IdentityUser>(
options => options.SignIn.RequireConfirmedAccount = true)
.AddEntityFrameworkStores<ApplicationDbContext>();
// Pre 3.0:
// services.AddMvc(options => options.Filters.Add(new AuthorizeFilter(...));
services.AddControllersWithViews();
services.AddRazorPages();
services.AddAuthorization(o => o.AddPolicy(_RequireAuthenticatedUserPolicy,
builder => builder.RequireAuthenticatedUser()));
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
app.UseDatabaseErrorPage();
}
else
{
app.UseExceptionHandler("/Home/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthentication();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapDefaultControllerRoute()
.RequireAuthorization(_RequireAuthenticatedUserPolicy);
endpoints.MapRazorPages();
});
}
}
İlkeler de özelleştirilebilir. , DefaultPolicy Kimlik doğrulaması gerektirecek şekilde yapılandırılır:
public class Startup
{
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public IConfiguration Configuration { get; }
public void ConfigureServices(IServiceCollection services)
{
services.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(
Configuration.GetConnectionString("DefaultConnection")));
services.AddDefaultIdentity<IdentityUser>(
options => options.SignIn.RequireConfirmedAccount = true)
.AddEntityFrameworkStores<ApplicationDbContext>();
services.AddControllersWithViews();
services.AddRazorPages();
services.AddAuthorization(options =>
{
options.DefaultPolicy = new AuthorizationPolicyBuilder()
.RequireAuthenticatedUser()
.Build();
});
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
app.UseDatabaseErrorPage();
}
else
{
app.UseExceptionHandler("/Home/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthentication();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapDefaultControllerRoute().RequireAuthorization();
endpoints.MapRazorPages();
});
}
}
[AllowAnonymous]
public class HomeController : Controller
{
Alternatif olarak, tüm uç noktalar [Authorize] bir veya yapılandırması olmadan yetkilendirme gerektirecek şekilde yapılandırılabilir RequireAuthorization FallbackPolicy . , FallbackPolicy Öğesinden farklıdır DefaultPolicy . , DefaultPolicy Veya tarafından tetiklenir [Authorize] RequireAuthorization , ancak başka bir FallbackPolicy ilke ayarlanmamışsa tetiklenir. FallbackPolicy Başlangıçta yetkilendirmesiz isteklere izin verecek şekilde yapılandırılmıştır.
Aşağıdaki örnek, önceki örnekle aynıdır, DefaultPolicy ancak FallbackPolicy belirtilen durumlar hariç tüm uç noktalarında her zaman kimlik doğrulaması gerektirmek için kullanır [AllowAnonymous] :
public void ConfigureServices(IServiceCollection services)
{
...
services.AddAuthorization(options =>
{
options.FallbackPolicy = new AuthorizationPolicyBuilder()
.RequireAuthenticatedUser()
.Build();
});
}
public void Configure(IApplicationBuilder app)
{
...
app.UseRouting();
app.UseAuthentication();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapDefaultControllerRoute();
});
}
[AllowAnonymous]
public class HomeController : Controller
{
...
}
Belirli bir yetkilendirme bilgisine sahip olmayan, ara yazılım tarafından yetkilendirme çalışmaktadır. Örneğin, sistem durumu denetimlerinde belirli bir yetkilendirme bilgisi yoktur, ancak sistem durumu denetimleri, ara yazılım tarafından uygulanan yapılandırılabilir bir yetkilendirme ilkesine sahip olabilir.
Ayrıca, her uç nokta yetkilendirme gereksinimlerini özelleştirebilir. Aşağıdaki örnekte, UseAuthorization ile yetkilendirmeyi işler DefaultPolicy , ancak /healthz sistem durumu denetimi uç noktası bir admin Kullanıcı gerektirir:
public void Configure(IApplicationBuilder app)
{
...
app.UseRouting();
app.UseAuthentication();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints
.MapHealthChecks("/healthz")
.RequireAuthorization(new AuthorizeAttribute(){ Roles = "admin", });
});
}
Koruma bazı senaryolar için uygulanır. Bir yetkilendirme veya CORS ilkesi eksik ara yazılım nedeniyle atlandıysa uç noktalar ara yazılımı bir özel durum oluşturur. Yanlış yapılandırma hakkında ek geribildirim sağlamak için çözümleyici desteği devam ediyor.
Özel yetkilendirme işleyicileri
Uygulama özel Yetkilendirme işleyicilerikullanıyorsa, uç nokta yönlendirmesi MVC 'den farklı bir kaynak türünü işleyicilere geçirir. Yetkilendirme işleyicisi bağlam kaynağının türünde olmasını bekleyen işleyiciler AuthorizationFilterContext (( MVC filtreleri tarafından sağlanankaynak türü), türündeki kaynakları işleyecek şekilde RouteEndpoint (bir uç nokta yönlendirmeye göre yetkilendirme işleyicilerine verilen kaynak türü) yönelik olarak güncelleştirilmeleri gerekir.
MVC hala AuthorizationFilterContext kaynakları kullanıyor, bu nedenle uygulama, uç nokta yönlendirme yetkilendirmesi ile bırlıkte MVC yetkilendirme filtrelerini kullanıyorsa, her iki kaynak türünü de yönetmek gerekebilir.
SignalR
Hub 'ların eşlemesi SignalR artık içinde yer alır UseEndpoints .
Her hub 'ı ile eşleyin MapHub . Önceki sürümlerde olduğu gibi, her hub açık olarak listelenir.
Aşağıdaki örnekte, Hub için destek ChatHub SignalR eklenmiştir:
public void Configure(IApplicationBuilder app)
{
...
app.UseRouting();
app.UseEndpoints(endpoints =>
{
endpoints.MapHub<ChatHub>();
});
}
İstemcilerden gelen ileti boyutu sınırlarını denetlemek için yeni bir seçenek vardır. Örneğin, içinde Startup.ConfigureServices :
services.AddSignalR(hubOptions =>
{
hubOptions.MaximumReceiveMessageSize = 32768;
});
ASP.NET Core 2,2 ' de, TransportMaxBufferSize en büyük ileti boyutunu etkin bir şekilde denetleyebilecek ve ' yi ayarlayabilirsiniz. ASP.NET Core 3,0 ' de, bu seçenek artık yalnızca geri basınç gözlemlenmeyen en büyük boyutu denetler.
MVC denetleyicileri
Denetleyicilerin eşlemesi artık içinde yer alır UseEndpoints .
MapControllersUygulama öznitelik yönlendirme kullanıyorsa ekleyin. yönlendirme ASP.NET Core 3,0 veya sonraki sürümlerde birçok çerçeve için destek içerdiğinden, öznitelik yönlendirmeli denetleyiciler eklemek kabul edilir.
Şunları değiştirin:
MapRoutekullanılarakMapControllerRouteMapAreaRoutekullanılarakMapAreaControllerRoute
Yönlendirme şimdi yalnızca MVC 'den daha fazlasına destek içerdiğinden, bu yöntemlerin ne yapacaklarına açık bir şekilde sahip olması için terminoloji değişmiştir. Gibi geleneksel yollar MapControllerRoute / MapAreaControllerRoute / MapDefaultControllerRoute eklendikleri sırayla uygulanır. Önce daha belirli yollar (örneğin, bir alana yönelik yollar) yerleştirin.
Aşağıdaki örnekte:
MapControllersöznitelik yönlendirmeli denetleyiciler için destek ekler.MapAreaControllerRoutebir alanındaki denetleyiciler için geleneksel bir yol ekler.MapControllerRoutedenetleyiciler için geleneksel bir yol ekler.
public void Configure(IApplicationBuilder app)
{
...
app.UseRouting();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
endpoints.MapAreaControllerRoute(
"admin",
"admin",
"Admin/{controller=Home}/{action=Index}/{id?}");
endpoints.MapControllerRoute(
"default", "{controller=Home}/{action=Index}/{id?}");
});
}
Denetleyici eylem adlarından zaman uyumsuz son ek kaldırma
ASP.NET Core 3,0 ' de ASP.NET Core MVC, Async son eki denetleyici eylem adlarından kaldırır. Hem yönlendirme hem de bağlantı oluşturma, bu yeni varsayılan değerinden etkilenir. Örnek:
public class ProductsController : Controller
{
public async Task<IActionResult> ListAsync()
{
var model = await _dbContext.Products.ToListAsync();
return View(model);
}
}
ASP.NET Core 3,0 öncesi:
Önceki eyleme Ürünler/ListAsync rotası üzerinden erişilebilir.
Son eki belirten bağlantı oluşturma gerekiyor
Async. Örnek:<a asp-controller="Products" asp-action="ListAsync">List</a>
ASP.NET Core 3,0:
Yukarıdaki eyleme, Ürünler/liste rotasında erişilebilir.
Bağlantı oluşturma, sonekin belirtilmesini gerektirmez
Async. Örnek:<a asp-controller="Products" asp-action="List">List</a>
Bu değişiklik, özniteliği kullanılarak belirtilen adları etkilemez [ActionName] . Varsayılan davranış ' de aşağıdaki kodla devre dışı bırakılabilir Startup.ConfigureServices :
services.AddMvc(options =>
options.SuppressAsyncSuffixInActionNames = false);
Bağlantı oluşturma değişiklikleri
Önceki yönlendirme sürümlerindeki farklılıklarhakkında belgelerde açıklandığı gibi, bağlantı oluşturma ( Url.Link Örneğin ve benzer API 'ler kullanılarak) ile ilgili bazı farklılıklar vardır. Bu modüller şunlardır:
- Varsayılan olarak, uç nokta yönlendirme kullanılırken, üretilen URI 'Ler içindeki yol parametrelerinin büyük küçük harf korunması zorunlu değildir. Bu davranış,
IOutboundParameterTransformerarabirimiyle denetlenebilir. - Geçersiz bir yol (mevcut olmayan bir denetleyici/eylem veya sayfa) için URI oluşturma, geçersiz bir URI oluşturmak yerine Endpoint Routing altında boş bir dize oluşturur.
- Çevresel değerler (geçerli bağlamdaki rota parametreleri), uç nokta yönlendirme ile bağlantı oluşturmada otomatik olarak kullanılmaz. Daha önce, başka bir eyleme (veya sayfaya) bir bağlantı oluştururken, geçerli rota ortam değerlerinden belirtilmemiş yol değerleri çıkarsanamıyor. Endpoint Routing kullanılırken, bağlantı oluşturma sırasında tüm rota parametreleri açıkça belirtilmelidir.
Razor Sayfaları
Eşleme Razor sayfaları artık içinde yer alır UseEndpoints .
MapRazorPagesUygulama sayfaları kullanıyorsa ekleyin Razor . Endpoint Routing birçok çerçeve için destek içerdiğinden, sayfa ekleme Razor artık kabul edilir.
Aşağıdaki Startup.Configure yöntemde, MapRazorPages sayfalar için destek ekler Razor :
public void Configure(IApplicationBuilder app)
{
...
app.UseRouting();
app.UseEndpoints(endpoints =>
{
endpoints.MapRazorPages();
});
}
Endpoint Routing olmadan MVC kullanma
UseMvcASP.NET Core 3,0 aracılığıyla veya UseMvcWithDefaultRoute içinde MVC kullanmanın içinde açık bir kabul olması gerekir Startup.ConfigureServices . Bu, MVC 'nin başlatma sırasında yetkilendirme ve CORS ara yazılımını kullanıp kullanamayacağını bilmeleri gerektiğinden gereklidir. Uygulama desteklenmeyen bir yapılandırmayı kullanmayı denerse sizi uyaran bir çözümleyici sağlanır.
Uygulama eski IRouter destek gerektiriyorsa, EnableEndpointRouting içinde aşağıdaki yaklaşımlardan herhangi birini kullanarak devre dışı bırakın Startup.ConfigureServices :
services.AddMvc(options => options.EnableEndpointRouting = false);
services.AddControllers(options => options.EnableEndpointRouting = false);
services.AddControllersWithViews(options => options.EnableEndpointRouting = false);
services.AddRazorPages().AddMvcOptions(options => options.EnableEndpointRouting = false);
Sistem durumu denetimleri
Sistem durumu denetimleri, uç nokta yönlendirme özellikli bir yönlendirici-yazılım olarak kullanılabilir.
MapHealthChecksUç nokta yönlendirme ile durum denetimlerini kullanmak için ekleyin. MapHealthChecksYöntemi şuna benzer bağımsız değişkenleri kabul eder UseHealthChecks . Fazla kullanmanın avantajı, yetkilendirme uygulama ve eşleştirme ilkesi üzerinde daha fazla ince MapHealthChecks UseHealthChecks denetime sahip olmaktır.
Aşağıdaki örnekte, 'de MapHealthChecks bir durum denetimi uç noktası için çağrılır: /healthz
public void Configure(IApplicationBuilder app)
{
...
app.UseRouting();
app.UseEndpoints(endpoints =>
{
endpoints.MapHealthChecks("/healthz", new HealthCheckOptions() { });
});
}
HostBuilder, WebHostBuilder'ın yerini aldı
3.0 ASP.NET Core şablonları Genel Ana Bilgisayarı kullanır. Önceki sürümlerde Web Ana Bilgisayarı kullanılmıştır. Aşağıdaki kod, ASP.NET Core 3.0 şablonu tarafından oluşturulan sınıfı Program gösterir:
// requires using Microsoft.AspNetCore.Hosting;
// requires using Microsoft.Extensions.Hosting;
public class Program
{
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
}
Aşağıdaki kod, ASP.NET Core 2.2 şablonu tarafından oluşturulan sınıfı Program gösterir:
public class Program
{
public static void Main(string[] args)
{
CreateWebHostBuilder(args).Build().Run();
}
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>();
}
IWebHostBuilder , 3.0'da kalır ve önceki kod webBuilder örneğinde görülen t değeridir. WebHostBuilder gelecek bir sürümde kullanımdan çıkar ve ile HostBuilder değiştirilir.
ile arasındaki en önemli değişiklik WebHostBuilder HostBuilder bağımlılık eklemede (DI) şeklindedir. kullanırken, HostBuilder yalnızca aşağıdakini 'nin oluşturucus Startup una yapıcıya 50000000000000000000000000000
HostBuilderDI kısıtlamaları:
- DI kapsayıcısı yalnızca bir kez inşa edilecek şekilde etkinleştirin.
- Tek tonların birden çok örneğini çözümleme gibi sonuçta ortaya çıkan nesne yaşam süresi sorunlarını önler.
Daha fazla bilgi için bkz. ASP.NET Core 3'te Başlangıç hizmeti eklemeden kaçınma.
AddAuthorization farklı bir derlemeye taşındı
aşağıdaki ASP.NET Core 2.2 AddAuthorization ve daha düşük Microsoft.AspNetCore.Authorization.dll:
- yeniden
AddAuthorizationCoreadlandırıldı. - , Microsoft.AspNetCore.Authorization.Policy.dll.
Hem uygulama hem deMicrosoft.AspNetCore.Authorization.dll Microsoft.AspNetCore.Authorization.Policy.dll uygulamalar etkilenmez.
Microsoft.AspNetCore.Authorization.Policy.dll kullanmayan uygulamalar aşağıdakilerden birini gerçekleştirin:
- Microsoft.AspNetCore.Authorization.Policy.dll. ** Bu yaklaşım çoğu uygulama için çalışır ve gerekli olan tek şey budur.
- Kullanmaya geçiş
AddAuthorizationCore
Daha fazla bilgi için bkz. 'de yeni AddAuthorization(o => değişiklik) aşırı yüklemesi farklı bir derlemede #386..
Identity UI
IdentityASP.NET Core 3.0 için kullanıcı arabirimi güncelleştirmeleri:
- Microsoft.AspNetCore.'a paket başvurusu ekleyin. Identity . kullanıcı arabirimi.
- Sayfaları kullanmayan uygulamaların Razor çağrısı
MapRazorPagesgerekir. Bu Razor belgede yer alan Sayfalar'a bakın. - Bootstrap 4 varsayılan kullanıcı arabirimi çerçevesidir. Varsayılanı
IdentityUIFrameworkVersiondeğiştirmek için bir proje özelliği ayarlayın. Daha fazla bilgi için bu GitHub bakın.
SignalR
SignalRJavaScript istemcisi olarak @aspnet/signalr @microsoft/signalr değiştirildi. Bu değişiklike tepki olarak, dosyalarda, package.js ve ECMAScript deyimleri üzerinde require import başvurularını değiştirebilirsiniz.
System.Text.Jsvarsayılan protokoldür
System.Text.Json artık hem istemci hem de sunucu tarafından kullanılan varsayılan Hub protokolüdür.
içinde, Startup.ConfigureServices seri AddJsonProtocol hale getirici seçeneklerini ayarlamak için çağrısı.
Sunucu:
services.AddSignalR(...)
.AddJsonProtocol(options =>
{
options.PayloadSerializerOptions.WriteIndented = false;
})
Istemci:
new HubConnectionBuilder()
.WithUrl("/chathub")
.AddJsonProtocol(options =>
{
options.PayloadSerializerOptions.WriteIndented = false;
})
.Build();
Açık Newtonsoft.Jsgeçiş
üzerinde, üzerinde Newtonsoft.Js'de System.Text.Jsözelliklerini kullanıyorsanız,'a geri Newtonsoft.Json dön. Bu makalenin Newtonsoft.Jsönceki bir ASP.NET Core 3.0 SignalR projesinde Newtonsoft.Js'i kullanma makalesine bakın.
Redis dağıtılmış önbellekleri
Microsoft.Extensions.Önbelleğe Alma. Redis paketi, 3.0 ASP.NET Core sonraki uygulamalarda kullanılamaz. Paket başvurularını Microsoft.Extensions.Önbelleğe Alma. StackExchangeRedis. Daha fazla bilgi için bkz. ASP.NET Core 'de dağıtılmış önbelleğe alma.
Çalışma zamanı derlemesini kabul etmek
3 ASP.NET Core 3.0'dan önce, görünümlerin çalışma zamanı derlemesi çerçevenin örtülü bir özelliğidir. Çalışma zamanı derlemesi, görünümlerin derleme zamanı derlemesini tamamlar. Çerçevenin, dosyalar değiştirildiğinde uygulamanın tamamını yeniden derlemek zorunda kalmadan görünümleri ve sayfaları Razor (.cshtml dosyaları) derlemesini sağlar. Bu özellik, IDE'de hızlı bir düzenleme yapma ve değişiklikleri görüntülemek için tarayıcıyı yenileme senaryosunu destekler.
3 ASP.NET Core 3.0'da çalışma zamanı derlemesi bir kabul senaryosudur. Derleme zamanı derlemesi, görüntüleme derlemesi için varsayılan olarak etkinleştirilmiş tek mekanizmadır. Çalışma zamanı, .cshtml Visual Studio algılayan projeyi yeniden Visual Studio Code için Visual Studio veya dotnet-watch kullanır. Bu Visual Studio, çalıştırılma projesinde .cs, .cshtml veya .razor dosyalarında yapılan değişiklikler (Ctrl+F5), ancak hata ayıklaması (F5)değil, projenin yeniden derlemesini tetikler.
ASP.NET Core 3.0 projesinde çalışma zamanı derlemesini etkinleştirmek için:
Microsoft.AspNetCore.Mvc. Razor yükleyin. . RuntimeCompilation NuGet paketi.
çağrısı
Startup.ConfigureServicesyapmak içinAddRazorRuntimeCompilationgüncelleştirin:MVC ASP.NET Core için aşağıdaki kodu kullanın:
services.AddControllersWithViews() .AddRazorRuntimeCompilation(...);Sayfa ASP.NET Core Razor için aşağıdaki kodu kullanın:
services.AddRazorPages() .AddRazorRuntimeCompilation(...);
'daki https://github.com/aspnet/samples/tree/main/samples/aspnetcore/mvc/runtimecompilation örnek, Geliştirme ortamlarında çalışma zamanı derlemesini koşullu olarak etkinleştirme örneğini gösterir.
Dosya derleme hakkında daha Razor fazla bilgi için Razordosya derlemesi ASP.NET Core bkz. .
Çoklu hedefleme yoluyla kitaplıkları geçirme
Kitaplıkların genellikle birden çok uygulama sürümünü desteklemesi ASP.NET Core. Önceki sürümlere göre derlenmiş kitaplıkların çoğu ASP.NET Core çalışmalarına sorun olmadan devam edecektir. Aşağıdaki koşullarda uygulamanın çapraz derlenmiş olması gerekir:
- Kitaplık, ikili yeni bir değişikliği olan bir özelliğine bağlı olarak değişir.
- Kitaplık, ASP.NET Core 3.0'daki yeni özelliklerden yararlanmak istiyor.
Örnek:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFrameworks>netcoreapp3.0;netstandard2.0</TargetFrameworks>
</PropertyGroup>
<ItemGroup Condition="'$(TargetFramework)' == 'netcoreapp3.0'">
<FrameworkReference Include="Microsoft.AspNetCore.App" />
</ItemGroup>
<ItemGroup Condition="'$(TargetFramework)' == 'netstandard2.0'">
<PackageReference Include="Microsoft.AspNetCore" Version="2.1.0" />
</ItemGroup>
</Project>
#ifdefs3.0'ASP.NET Core API'leri etkinleştirmek için kullanın:
var webRootFileProvider =
#if NETCOREAPP3_0
GetRequiredService<IWebHostEnvironment>().WebRootFileProvider;
#elif NETSTANDARD2_0
GetRequiredService<IHostingEnvironment>().WebRootFileProvider;
#else
#error unknown target framework
#endif
Bir sınıf kitaplığında ASP.NET Core API'lerini kullanma hakkında daha fazla bilgi için bkz. bir sınıf kitaplığında ASP.NET Core apı 'leri kullanma .
Çeşitli değişiklikler
.NET Core 3.0 ve sonraki işletim sistemleri, null değer atılabilir olmayan parametreleri veya bağlı özellikleri bir özniteliğine sahip gibi [Required] kabul ediyor. Daha fazla bilgi için bkz. [Gerekli] özniteliği.
Yayımlama
Proje dizinindeki bin ve obj klasörlerini silin.
TestServer
Doğrudan Genel Ana TestServer Bilgisayar ile birlikte kullanan uygulamalar için, içinde TestServer üzerinde IWebHostBuilder ConfigureWebHost oluşturun:
[Fact]
public async Task GenericCreateAndStartHost_GetTestServer()
{
using var host = await new HostBuilder()
.ConfigureWebHost(webBuilder =>
{
webBuilder
.UseTestServer()
.Configure(app => { });
})
.StartAsync();
var response = await host.GetTestServer().CreateClient().GetAsync("/");
Assert.Equal(HttpStatusCode.NotFound, response.StatusCode);
}
Yeni API değişiklikleri
Yeni değişiklikleri gözden geçirme:
- ASP.NET Core 3.0 yayında yeni değişikliklerin tam listesi
- Antiforgery, CORS, Tanılama, MVCve Yönlendirme'de hataya neden olan API değişiklikleri. Bu liste uyumluluk anahtarları için yeni değişiklikler içerir.
- .NET Core, ASP.NET Core ve Entity Framework Core'da 2.2'den 3.0'a kadar yeni değişikliklerin özeti için bkz. Sürüm 2.2'den 3.0'ageçiş için yeni değişiklikler.
Hepsini yakala parametresiyle uç nokta yönlendirme
Uyarı
Bir catch-all parametresi, yönlendirdeki bir hata nedeniyle yollarla yanlış bir şekilde eşleşmeyebilir. Bu hatadan etkilenen uygulamalar aşağıdaki özelliklere sahiptir:
- Örneğin, bir catch-all rotası
{**slug}" - Catch-all yolu eşleşmesi gereken isteklerle eşleşemez.
- Diğer yolların kaldırılması, catch-all yolunun çalışmaya başlamasını sağlar.
Bu hataya vurmakta olan örnekler için GitHub hataları 18677 ve 16579 bakın.
Bu hata için bir katılım çözümü .NET Core 3.1.301 SDK ve sonraki sürümlerdebulunur. Aşağıdaki kod, bu hatayı düzelten bir iç anahtar ayarlar:
public static void Main(string[] args)
{
AppContext.SetSwitch("Microsoft.AspNetCore.Routing.UseCorrectCatchAllBehavior",
true);
CreateHostBuilder(args).Build().Run();
}
// Remaining code removed for brevity.
Azure App Service üzerinde .NET Core 3.0
.NET Core'Azure App Service tamam. .NET Core 3.0, tüm Azure App Service kullanılabilir.