.NET Core 3.1'de hataya neden olan değişiklikler
.NET Core veya ASP.NET Core'un 3.1 sürümüne geçiriyorsanız, bu makalede listelenen hataya neden olan değişiklikler uygulamanızı etkileyebilir.
Chrome ve Firefox gibi bazı tarayıcılar, tanımlama bilgileri için uygulamalarında SameSite
hataya neden olan değişiklikler yaptı. Değişiklikler, OpenID Bağlan ve WS-Federation gibi uzak kimlik doğrulama senaryolarını etkiler ve bu senaryolar gönderilerek SameSite=None
devre dışı bırakılmalıdır. Ancak, SameSite=None
iOS 12'de ve diğer tarayıcıların bazı eski sürümlerinde kesintiler olur. Uygulamanın bu sürümleri algılaması ve atlanması SameSite
gerekir.
Bu sorunla ilgili tartışma için bkz . dotnet/aspnetcore#14996.
3.1 Önizleme 1
SameSite
, HTTP tanımlama bilgileri için 2016 taslak standart uzantısıdır. Siteler Arası İstek Sahteciliğini (CSRF) azaltmaya yöneliktir. Bu, başlangıçta sunucuların yeni parametreleri ekleyerek kabul edecekleri bir özellik olarak tasarlanmıştır. ASP.NET Core 2.0 için SameSite
ilk destek eklendi.
Google geriye dönük uyumlu olmayan yeni bir taslak standardı önerdi. Standart, varsayılan modu olarak Lax
değiştirir ve geri çevirmek için yeni bir giriş None
ekler. Lax
Çoğu uygulama tanımlama bilgisi için yeterlidir; ancak OpenID Bağlan ve WS-Federation oturum açma bilgileri gibi siteler arası senaryoları bozar. OAuth oturum açma bilgilerinin çoğu, isteğin akışındaki farklılıklar nedeniyle etkilenmez. Yeni None
parametre, önceki taslak standardını uygulayan istemcilerle uyumluluk sorunlarına neden olur (örneğin, iOS 12). Chrome 80 değişiklikleri içerir. Chrome ürün başlatma zaman çizelgesi için bkz. SameSite Güncelleştirmeler.
ASP.NET Core 3.1, yeni SameSite
davranışı uygulayacak şekilde güncelleştirildi. Güncelleştirme, yayma SameSite=None
davranışını SameSiteMode.None
yeniden tanımlar ve özniteliğini atacak SameSite
yeni bir değer SameSiteMode.Unspecified
ekler. Tanımlama bilgisi kullanan bazı bileşenler OpenID Bağlan bağıntı ve nonce tanımlama bilgileri gibi senaryolarına daha özel değerler ayarlasa da, tüm tanımlama bilgisi API'leri artık varsayılan Unspecified
olarak olarak ayarlanmıştır.
Bu alandaki diğer son değişiklikler için bkz . HTTP: Bazı tanımlama bilgisi SameSite varsayılanları Yok olarak değiştirildi. ASP.NET Core 3.0'da çoğu varsayılan değer olarak SameSiteMode.Lax SameSiteMode.None değiştirildi (ancak önceki standart kullanılıyordu).
Tarayıcı ve belirtim, önceki metinde özetlenen şekilde değişir.
Üçüncü taraf oturum açma bilgileri gibi uzak sitelerle etkileşim kuran uygulamaların şunları gerçekleştirmesi gerekir:
- Bu senaryoları birden çok tarayıcıda test edin.
- Eski tarayıcıları destekleme bölümünde açıklanan tanımlama bilgisi ilkesi tarayıcı algılama azaltmasını uygulayın.
Test ve tarayıcı algılama yönergeleri için aşağıdaki bölüme bakın.
Yeni davranışı kabul eden bir istemci sürümü kullanarak web uygulamanızı test edin. Chrome, Firefox ve Microsoft Edge Chromium'un tümü test için kullanılabilecek yeni kabul etme özelliği bayraklarına sahiptir. Düzeltme eklerini uyguladıktan sonra uygulamanızın eski istemci sürümleriyle uyumlu olduğunu doğrulayın( özellikle Safari). Daha fazla bilgi için bkz . Eski tarayıcıları destekleme.
Chrome 78 ve üzeri, yanıltıcı test sonuçları verir. Bu sürümlerin geçici bir azaltması vardır ve iki dakikadan kısa süreli tanımlama bilgilerine izin verir. Uygun test bayrakları etkinleştirildiğinde Chrome 76 ve 77 daha doğru sonuçlar verir. Yeni davranışı test etmek için etkin seçeneğine geçin chrome://flags/#same-site-by-default-cookies
. Chrome 75 ve önceki sürümlerin yeni None
ayarda başarısız olduğu bildirilir. Daha fazla bilgi için bkz . Eski tarayıcıları destekleme.
Google, eski Chrome sürümlerini kullanıma sunmuyor. Ancak test için yeterli olacak eski Chromium sürümlerini indirebilirsiniz. Chromium'u İndirme başlığındaki yönergeleri izleyin.
Safari 12, önceki taslağı kesin olarak uyguladı ve tanımlama bilgilerinde yeni None
değeri görürse başarısız oluyor. Bu, Eski tarayıcıları destekleme bölümünde gösterilen tarayıcı algılama kodu aracılığıyla önlenmelidir. Safari 12 ve 13'e ek olarak Microsoft Kimlik Doğrulama Kitaplığı (MSAL), Active Directory Kimlik Doğrulama Kitaplığı (ADAL) veya kullandığınız kitaplığı kullanarak WebKit tabanlı, işletim sistemi stili oturum açma bilgilerini test edin. Sorun, temel işletim sistemi sürümüne bağlıdır. OSX Mojave 10.14 ve iOS 12'nin yeni davranışla uyumluluk sorunları olduğu bilinmektedir. OSX Catalina 10.15 veya iOS 13 sürümüne yükseltme sorunu düzeltir. Safari şu anda yeni belirtim davranışını test etmek için bir kabul bayrağına sahip değildir.
Yeni standart için Firefox desteği, özellik bayrağıyla network.cookie.sameSite.laxByDefault
sayfadan kabul edilerek sürüm 68 ve sonraki sürümlerde about:config
test edilebilir. Firefox'un eski sürümlerinde uyumluluk sorunu bildirilmemiştir.
Microsoft Edge eski SameSite
standardı desteklese de, sürüm 44 itibarıyla yeni standartla ilgili herhangi bir uyumluluk sorunu yaşamadı.
Özellik bayrağı şeklindedir edge://flags/#same-site-by-default-cookies
. Microsoft Edge Chromium 78 ile test edilirken hiçbir uyumluluk sorunu gözlemlenmedi.
Electron sürümleri Chromium'un eski sürümlerini içerir. Örneğin, Microsoft Teams tarafından kullanılan Electron sürümü, eski davranışları gösteren Chromium 66'dır. Ürününüzün kullandığı Elektron sürümüyle kendi uyumluluk testinizi gerçekleştirin. Daha fazla bilgi için bkz . Eski tarayıcıları destekleme.
2016 SameSite
standardı bilinmeyen değerlerin değer olarak SameSite=Strict
ele alındığını zorunlu kılındı. Sonuç olarak, özgün standardı destekleyen tüm eski tarayıcılar değerine None
sahip bir SameSite
özellik gördüklerinde bozulabilir. Web uygulamaları, bu eski tarayıcıları desteklemeyi amaçlıyorsa tarayıcı algılamayı uygulamalıdır. ASP.NET Core, istek üst bilgisi değerleri son derece kararsız olduğundan User-Agent
ve haftalık olarak değiştiği için tarayıcı algılamayı uygulamaz. Bunun yerine, tanımlama bilgisi ilkesindeki bir uzantı noktası belirli bir mantık eklemenize User-Agent
olanak tanır.
Startup.cs aşağıdaki kodu ekleyin:
private void CheckSameSite(HttpContext httpContext, CookieOptions options)
{
if (options.SameSite == SameSiteMode.None)
{
var userAgent = httpContext.Request.Headers["User-Agent"].ToString();
// TODO: Use your User Agent library of choice here.
if (/* UserAgent doesn't support new behavior */)
{
options.SameSite = SameSiteMode.Unspecified;
}
}
}
public void ConfigureServices(IServiceCollection services)
{
services.Configure<CookiePolicyOptions>(options =>
{
options.MinimumSameSitePolicy = SameSiteMode.Unspecified;
options.OnAppendCookie = cookieContext =>
CheckSameSite(cookieContext.Context, cookieContext.CookieOptions);
options.OnDeleteCookie = cookieContext =>
CheckSameSite(cookieContext.Context, cookieContext.CookieOptions);
});
}
public void Configure(IApplicationBuilder app)
{
// Before UseAuthentication or anything else that writes cookies.
app.UseCookiePolicy();
app.UseAuthentication();
// code omitted for brevity
}
Uyumluluk anahtarı, Microsoft.AspNetCore.SuppressSameSiteNone
yeni ASP.NET Çekirdek tanımlama bilgisi davranışını geçici olarak geri çevirmenizi sağlar. Projenizdeki bir runtimeconfig.template.json dosyasına aşağıdaki JSON dosyasını ekleyin:
{
"configProperties": {
"Microsoft.AspNetCore.SuppressSameSiteNone": "true"
}
}
İlgili SameSite
düzeltme ekleri şunlar için kullanıma sunulacaktır:
- ASP.NET Core 2.1, 2.2 ve 3.0
Microsoft.Owin
4.1System.Web
(.NET Framework 4.7.2 ve üzeri için)
ASP.NET
- Microsoft.AspNetCore.Builder.CookiePolicyOptions.MinimumSameSitePolicy
- Microsoft.AspNetCore.Http.CookieBuilder.SameSite
- Microsoft.AspNetCore.Http.CookieOptions.SameSite
- Microsoft.AspNetCore.Http.SameSiteMode
- Microsoft.Net.Http.Headers.SameSiteMode
- Microsoft.Net.Http.Headers.SetCookieHeaderValue.SameSite
64 bit Windows'ta x86 konak yolu
.NET Core SDK 3.1.400'den başlayarak, hedef tarafından RunResolvePackageDependencies
yalnızca en üst düzey paket başvuruları döndürülür.
.NET Core SDK 3.1.400
.NET Core SDK'sının önceki sürümlerinde hedef, RunResolvePackageDependencies
NuGet varlıkları dosyasından bilgi içeren aşağıdaki MSBuild öğelerini oluşturmuştur:
PackageDefinitions
PackageDependencies
TargetDefinitions
FileDefinitions
FileDependencies
Bu veriler Visual Studio tarafından Çözüm Gezgini Bağımlılıklar düğümünü doldurmak için kullanılır. Ancak, bu büyük miktarda veri olabilir ve Bağımlılıklar düğümü genişletilmediği sürece verilere ihtiyaç duyulmaz.
.NET Core SDK sürüm 3.1.400'den başlayarak, bu öğelerin çoğu varsayılan olarak oluşturulmaz. Yalnızca türdeki Package
öğeler döndürülür. Visual Studio Bağımlılıklar düğümünü doldurmak için öğelere ihtiyaç duyuyorsa, bilgileri doğrudan varlıklar dosyasından okur.
Bu değişiklik, Visual Studio'nun içindeki çözüm yükü performansını geliştirmek için kullanıma sunulmuştur. Daha önce, çoğu kullanıcının asla görüntüleyemeyecekleri birçok başvuru yüklenmesini kapsayan tüm paket başvuruları yükleniyordu.
Oluşturulan bu öğelere bağlı MSBuild mantığınız varsa, proje dosyanızda özelliğini olarak true
ayarlayınEmitLegacyAssetsFileItems
. Bu ayar, tüm öğelerin oluşturulduğu önceki davranışı etkinleştirir.
MSBuild
Yok
Kök klasördeki araç bildirimleri
.NET Core 3.1'den başlayarak, bazı Windows Forms denetimleri artık kullanılamaz.
.NET Core 3.1'den başlayarak, çeşitli Windows Forms denetimleri artık kullanılamaz. .NET Framework 2.0'da daha iyi tasarıma ve desteğe sahip değiştirme denetimleri kullanıma sunulmuştur. Kullanım dışı bırakılan denetimler daha önce tasarımcı araç kutularından kaldırılmıştı ancak hala kullanılabilir durumdaydı.
Aşağıdaki türler artık kullanılamaz:
- ContextMenu
- DataGrid
- DataGrid.HitTestType
- DataGrid.HitTestInfo
- DataGridBoolColumn
- DataGridCell
- DataGridColumnStyle
- DataGridColumnStyle.DataGridColumnHeaderAccessibleObject
- DataGridColumnStyle.CompModSwitches
- DataGridLineStyle
- DataGridParentRowsLabelStyle
- DataGridPreferredColumnWidthTypeConverter
- DataGridTableStyle
- DataGridTextBox
- DataGridTextBoxColumn
- GridColumnStylesCollection
- GridTablesFactory
- GridTableStylesCollection
- IDataGridEditingService
- IMenuEditorService
- MainMenu
- Menu
- Menu.MenuItemCollection
- MenuItem
- ToolBar
- ToolBarAppearance
- ToolBarButton
- ToolBar.ToolBarButtonCollection
- ToolBarButtonClickEventArgs
- ToolBarButtonStyle
- ToolBarTextAlign
3.1
Kaldırılan her denetimin önerilen bir değiştirme denetimi vardır. Aşağıdaki tabloya bakın:
Denetim kaldırıldı (API) | Önerilen değiştirme | Kaldırılan ilişkili API'ler |
---|---|---|
ContextMenu | ContextMenuStrip | |
DataGrid | Datagridview | DataGridCell, DataGridRow, DataGridTableCollection, DataGridColumnCollection, DataGridTableStyle, DataGridColumnStyle, DataGridLineStyle, DataGridParentRowsLabel, DataGridParentRowsLabelStyle, DataGridBoolColumn, DataGridTextBox, GridColumnStylesCollection, GridTableStylesCollection, HitTestType |
Mainmenu | MenuStrip | |
Menü | ToolStripDropDown, ToolStripDropDownMenu | Menuıtemcollection |
MenuItem | Toolstripmenuıtem | |
ToolBar | ToolStrip | ToolBarAppearance |
Toolbarbutton | Toolstripbutton | ToolBarButtonClickEventArgs, ToolBarButtonClickEventHandler, ToolBarButtonStyle, ToolBarTextAlign |
Windows Forms
- System.Windows.Forms.ContextMenu
- System.Windows.Forms.GridColumnStylesCollection
- System.Windows.Forms.GridTablesFactory
- System.Windows.Forms.GridTableStylesCollection
- System.Windows.Forms.IDataGridEditingService
- System.Windows.Forms.MainMenu
- System.Windows.Forms.Menu
- System.Windows.Forms.Menu.MenuItemCollection
- System.Windows.Forms.MenuItem
- System.Windows.Forms.ToolBar
- System.Windows.Forms.ToolBar.ToolBarButtonCollection
- System.Windows.Forms.ToolBarAppearance
- System.Windows.Forms.ToolBarButton
- System.Windows.Forms.ToolBarButtonClickEventArgs
- System.Windows.Forms.ToolBarButtonStyle
- System.Windows.Forms.ToolBarTextAlign
- System.Windows.Forms.DataGrid
- System.Windows.Forms.DataGrid.HitTestType
- System.Windows.Forms.DataGridBoolColumn
- System.Windows.Forms.DataGridCell
- System.Windows.Forms.DataGridColumnStyle
- System.Windows.Forms.DataGridLineStyle
- System.Windows.Forms.DataGridParentRowsLabelStyle
- System.Windows.Forms.DataGridPreferredColumnWidthTypeConverter
- System.Windows.Forms.DataGridTableStyle
- System.Windows.Forms.DataGridTextBox
- System.Windows.Forms.DataGridTextBoxColumn
- System.Windows.Forms.Design.IMenuEditorService
DataGridView Artık bir farenin üzerine gelindiğinde ve klavye aracılığıyla seçildiğinde hücrenin metin ve hata araç ipuçlarını gösterir. Bir araç ipucu gösteriliyorsa, DataGridView.CellFormatting olay tetiklenmez.
.NET Core 3.1'in ShowCellToolTips öncesinde, DataGridView özelliği true
bir hücrenin metni için bir araç ipucu ve fareyle üzerine gelindiğinde oluşan hatalar için araç ipucu gösterilmişti. Klavye aracılığıyla bir hücre seçildiğinde araç ipuçları gösterilmedi (örneğin, Sekme tuşu, kısayol tuşları veya ok gezintisi kullanılarak). Kullanıcı bir hücreyi düzenlemişse ve daha sonra düzenleme modundayken DataGridView , özelliği ayarlanmamış bir hücrenin ToolTipText üzerine gelindiğinde, hücrenin metnini hücrede görüntülenecek şekilde biçimlendirmek için bir CellFormatting olay tetiklendi.
.NET Core 3.1'den başlayarak, .true
NET Core 3.1'den başlayarak, ShowCellToolTips DataGridView bir hücrenin metni için araç ipuçlarını ve yalnızca hücre vurgulandığında değil, aynı zamanda klavye aracılığıyla seçildiğinde hataları gösteren bir erişilebilirlik standartlarını karşılamak için. Bu değişikliğin bir sonucu olarak, CellFormatting özelliği ayarlanmamış ToolTipText hücreler düzenleme modundayken DataGridView üzerine gelindiğinde olay tetiklenmez. Vurgulanan hücrenin içeriği hücrede görüntülenmek yerine araç ipucu olarak gösterildiğinden olay tetiklenmez.
3.1
Düzenleme modundayken DataGridView olaya bağlı CellFormatting olan tüm kodları yeniden düzenleyin.
Windows Forms
Hiçbiri
.NET geri bildirimi
.NET, açık kaynak bir projedir. Geri bildirim sağlamak için bir bağlantı seçin: