トレーニング
モジュール
.NET MAUI でデータ バインディングを使用する UI を作成します。 - Training
データ バインディングを使用して UI を作成します。 UI は最新のデータに基づいて自動的に更新され、データは UI の変更に応じて更新されます。
このブラウザーはサポートされなくなりました。
Microsoft Edge にアップグレードすると、最新の機能、セキュリティ更新プログラム、およびテクニカル サポートを利用できます。
.NET Core または ASP.NET Core のバージョン 3.1 に移行する場合、この記事の一覧にある破壊的変更がお使いのアプリに影響する可能性があります。
Chrome や Firefox などの一部のブラウザーでは、Cookie の SameSite
の実装に破壊的変更が加えられました。 この変更は、OpenID Connect や WS-Federation などのリモート認証シナリオに影響します。これをオプトアウトするには、SameSite=None
を送信します。 ただし、iOS 12 および一部の古いバージョンの他のブラウザーでは SameSite=None
は中断します。 アプリはこれらのバージョンをスニッフィングし、SameSite
を省略する必要があります。
この問題に関するディスカッションについては、dotnet/aspnetcore#14996 を参照してください。
3.1 Preview 1
SameSite
は、HTTP Cookie の 2016 ドラフト標準の拡張機能です。 これは、クロスサイト リクエスト フォージェリ (CSRF) を軽減することを目的としています。 もともと、これは、新しいパラメーターを追加することでサーバーでオプトインされる機能として設計されました。 ASP.NET Core 2.0 で SameSite
の初期サポートが追加されました。
Google から、は下位互換性のない新しいドラフト標準が提案されました この標準では、既定のモードが Lax
に変更され、オプトアウト対象の新しいエントリ None
が追加されています。Lax
はほとんどのアプリの Cookie に十分です。ただし、OpenID Connect や WS-Federation ログインなどのクロスサイト シナリオは中断されます。 ほとんどの OAuth ログインは、要求フローの違いによって影響を受けません。 新しい None
パラメーターを使うと、以前のドラフト標準 (iOS 12 など) を実装したクライアントとの互換性の問題が発生します。 Chrome 80 にこの変更が含まれます。 Chrome 製品の発売タイムラインについては、「SameSite Updates」(SameSite の更新) を参照してください。
ASP.NET Core 3.1 は、新しい SameSite
動作を実装するように更新されました。 この更新により、SameSite=None
が出力され、SameSite
属性を省略する新しい値 SameSiteMode.Unspecified
が追加されるように SameSiteMode.None
の動作が再定義されました。 すべての Cookie API の既定は Unspecified
になりましたが、Cookie を使用する一部のコンポーネントでは、OpenID Connect の相関関係や nonce Cookie など、シナリオに固有の値を設定します。
この分野の最近の変更については、「HTTP:SameSite の cookie オプションの既定値が一部、None に変更されました」を参照してください。 ASP.NET Core 3.0 では、ほとんどの既定値が SameSiteMode.Lax から SameSiteMode.None に変更されました (ただし、以前の標準を使用しています)。
既に概要を説明したように、ブラウザーと仕様が変わっています。
サードパーティ ログインなどを介してリモート サイトとやり取りするアプリは、以下を行う必要があります。
テストとブラウザー スニッフィングの手順については、次のセクションを参照してください。
新しい動作をオプトインできるクライアント バージョンを使用して、Web アプリをテストします。 Chrome、Firefox、Microsoft Edge Chromium のいずれにも、テストに使用できる新しいオプトイン機能フラグがあります。 パッチを適用した後、アプリが古いクライアント バージョンと互換性があることを確認します (特に Safari)。 詳細については、「以前のブラウザーをサポートする」を参照してください。
Chrome 78 以降では、誤解を招くテスト結果が生成されます。 これらのバージョンには一時的な軽減策が適用されており、2 分前よりも短い Cookie が許可されます。 適切なテスト フラグを有効にすると、Chrome 76 および 77 からはより正確な結果が生成されます。 新しい動作をテストするには、chrome://flags/#same-site-by-default-cookies
を有効に切り替えます。 Chrome 75 以前は、新しい None
設定を使うと失敗すると報告されています。 詳細については、「以前のブラウザーをサポートする」を参照してください。
Google は、以前のバージョンの Chrome を提供していません。 ただし、以前のバージョンの Chromium をダウンロードすることはできますが、テスト目的には十分です。 Chromium のダウンロードに関する記事の手順に従ってください。
Safari 12 では以前のドラフトが厳密に実装されており、Cookie に新しい None
値が存在すると失敗します。 これは、「以前のブラウザーをサポートする」に示されているブラウザー スニッフィング コードを使って防ぐ必要があります。 Microsoft Authentication Library (MSAL)、Active Directory 認証ライブラリ (ADAL)、または使用している任意のライブラリを使って、Safari 12 および 13 と WebKit ベースの OS スタイルのログインをテストしてください。 この問題は、基盤の OS バージョンによって変わります。 OSX Mojave 10.14 および iOS 12 には、新しい動作との互換性の問題があることがわかっています。 OSX Catalina 10.15 または iOS 13 にアップグレードすると、問題が解決します。 現在、Safari には新しい仕様の動作をテストするためのオプトイン フラグがありません。
Firefox の新しい標準のサポートは、バージョン 68 以降で、機能フラグ network.cookie.sameSite.laxByDefault
を指定して about:config
ページで選択することでオプトインできます。 以前のバージョンの Firefox では、互換性の問題は報告されていません。
Microsoft Edge では古い SameSite
標準がサポートされていますが、バージョン 44 の時点では、新しい標準との互換性の問題はありませんでした。
機能フラグは edge://flags/#same-site-by-default-cookies
です。 Microsoft Edge Chromium 78 を使ってテストした際には、互換性の問題は検出されませんでした。
Electron の複数のバージョンには、Chromium の古いバージョンが含まれています。 たとえば、Microsoft Teams で使用されている Electron のバージョンは Chromium 66 であり、以前の動作を示しています。 お使いの製品に使用されている Electron のバージョンを使って、ご自分で互換性テストを実行してください。 詳細については、「以前のブラウザーをサポートする」を参照してください。
2016 SameSite
標準では、不明な値を SameSite=Strict
値として扱うことが義務付けられていました。 そのため、元の標準をサポートする以前のブラウザーがある場合、値が None
の SameSite
プロパティが表示されたときに、中断される可能性があります。 このような以前のブラウザーをサポートする場合、Web アプリではブラウザー スニッフィングを実装する必要があります。 User-Agent
要求ヘッダー値は非常に不安定であり、週単位で変わるため、ASP.NET Core ではブラウザー スニッフィングを実装していません。 代わりに、Cookie ポリシーの拡張ポイントを使って、User-Agent
固有のロジックを追加できます。
Startup.cs で、次のコードを追加します。
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
}
Microsoft.AspNetCore.SuppressSameSiteNone
互換性スイッチを使用すると、新しい ASP.NET Core Cookie の動作を一時的にオプトアウトできます。 プロジェクトの runtimeconfig.template.json ファイルに次の JSON を追加します。
{
"configProperties": {
"Microsoft.AspNetCore.SuppressSameSiteNone": "true"
}
}
関連する SameSite
パッチは以下に対して適用されます。
Microsoft.Owin
4.1System.Web
(.NET Framework 4.7.2 以降の場合)ASP.NET
.NET Core SDK 3.1.400 以降では、RunResolvePackageDependencies
ターゲットから最上位のパッケージ参照のみが返されます。
.NET Core SDK 3.1.400
以前のバージョンの .NET Core SDK では、RunResolvePackageDependencies
ターゲットにより、NuGet アセット ファイルの情報を含む次の MSBuild 項目が作成されていました。
PackageDefinitions
PackageDependencies
TargetDefinitions
FileDefinitions
FileDependencies
このデータは、ソリューション エクスプローラーで [依存関係] ノードに設定するために、Visual Studio によって使用されます。 ただし、大量のデータになる場合があります。[依存関係] ノードが展開されていない限り、このデータは必要ありません。
.NET Core SDK バージョン 3.1.400 以降、これらの項目のほとんどは既定で生成されません。 型 Package
の項目のみが返されます。 [依存関係] ノード設定するために、Visual Studio に項目が必要な場合、アセット ファイルから情報が直接読み取られます。
この変更は、Visual Studio 内のソリューション読み込みのパフォーマンスを向上させるために導入されました。 以前はすべてのパッケージ参照が読み込まれ、ほとんどのユーザーが表示することのない多数の参照が読み込まれていました。
これらの項目が作成されることに依存する MSBuild ロジックがある場合は、プロジェクト ファイルで EmitLegacyAssetsFileItems
プロパティを true
に設定します。 この設定にすることで、すべての項目が作成される以前の動作が有効になります。
MSBuild
N/A
.NET Core 3.1 より、一部の Windows フォーム コントロールが利用できません。
.NET Core 3.1 より、さまざまな Windows フォーム コントロールが利用できなくなっています。 デザインとサポートが改善された代替コントロールは .NET Framework 2.0 で導入されました。 非推奨コントロールは前にデザイナー ツールボックスから削除されましたが、引き続き利用できました。
次の型は現在なくなっています。
3.1
削除されたコントロールにはいずれも、推奨の代替コントロールが与えられています。 次の表を参照してください。
削除されたコントロール (API) | 推奨代替 | 削除されている関連 API |
---|---|---|
ContextMenu | ContextMenuStrip | |
DataGrid | DataGridView | DataGridCell、DataGridRow、DataGridTableCollection、DataGridColumnCollection、DataGridTableStyle、DataGridColumnStyle、DataGridLineStyle、DataGridParentRowsLabel、DataGridParentRowsLabelStyle、DataGridBoolColumn、DataGridTextBox、GridColumnStylesCollection、GridTableStylesCollection、HitTestType |
MainMenu | MenuStrip | |
メニュー | ToolStripDropDown、ToolStripDropDownMenu | MenuItemCollection |
MenuItem | ToolStripMenuItem | |
ToolBar | ToolStrip | ToolBarAppearance |
ToolBarButton | ToolStripButton | ToolBarButtonClickEventArgs、ToolBarButtonClickEventHandler、ToolBarButtonStyle、ToolBarTextAlign |
Windows フォーム
マウスでポイントしたときと、キーボードで選択したときに、DataGridView にセルのテキストとエラーのヒントが表示されるようになりました。 ヒントが表示されている場合、DataGridView.CellFormatting イベントは発生しません。
.NET Core 3.1 より前、ShowCellToolTips プロパティが true
に設定されている DataGridView では、セルにマウスでポイントしたときにセルのテキストとエラーのヒントが表示されていました。 セルをキーボード (たとえば、Tab キー、ショートカット キー、矢印ナビゲーションなどを使用して) から選択したときはヒントが表示されませんでした。 ユーザーがセルを編集したときに DataGridView がまだ編集モードだった場合に ToolTipText プロパティが設定されていないセルをポイントすると、セルのテキストをセルに表示する書式設定をするための CellFormatting イベントが発生しました。
.NET Core 3.1 以降では、アクセシビリティの標準を満たすため、ShowCellToolTips プロパティが true
に設定されている DataGridView には、セルがポイントされたときだけでなく、キーボードを使用して選択されたときにも、セルのテキストとエラーのヒントが表示されます。 この変更の結果、DataGridView が編集モードの間に ToolTipText プロパティが設定されていないセルをポイントしても、CellFormatting イベントは発生しません。 イベントが発生しないのは、ポイントされたセルの内容が、セルに表示される代わりにヒントとして表示されるためです。
3.1
DataGridView が編集モードのときに、CellFormatting イベントに依存するすべてのコードをリファクターします。
Windows フォーム
なし
.NET に関するフィードバック
.NET はオープンソース プロジェクトです。 フィードバックを提供するにはリンクを選択します。
トレーニング
モジュール
.NET MAUI でデータ バインディングを使用する UI を作成します。 - Training
データ バインディングを使用して UI を作成します。 UI は最新のデータに基づいて自動的に更新され、データは UI の変更に応じて更新されます。