AspNet6InDepth
1.0.0
ASP.NET 6の概要
ASP.NET 6 の基礎
Program.csファイルの分析IMiddlewareインターフェースを実装することでRequestDelegateオブジェクトを挿入することによりapp.Use 、 app.Map 、 app.MapWhen 、 app.UseWhenおよびapp.Runを使用してインライン ミドルウェアを作成するapp.UseStaticFiles();app.UseCors();ProblemDetails応答を返すappsettings.{environment}.jsonおよびIConfigurationインターフェイスから構成を読み取ります。IOptions<T>インターフェイスを使用して、厳密に型指定された C# POCO に構成をバインドするIOptionsSnapshot<T>またはIOptionsMonitor<T>インターフェイスを使用して、実行時に厳密に型指定された C# POCO にリロードできるバインド構成HttpContext 、 HttpContext.RequestおよびHttpContext.ResponseについてRoute属性を使用して複数のルートをコントローラーにバインドするHttpGetAttribute 、 HttpPostAttribute 、 HttpPutAttribute 、 HttpPatchAttributeおよびHttpDeleteAttributeFromQuery : クエリ文字列から値を取得しますFromRoute : ルートデータから値を取得しますFromForm : 投稿されたフォームフィールドから値を取得しますFromBody : リクエスト本文から値を取得しますFromHeader : HTTP ヘッダーから値を取得しますIActionResult<T>またはActionResult<T>を使用して応答を処理するAcceptヘッダーを使用してコンテンツ ネゴシエーションを処理するAcceptヘッダーがapplication/xmlに設定されている場合は XML 応答を送信しますAcceptヘッダーがapplication/jsonに設定されている場合は、JSON 応答を送信しますHTTP Patchタイプのリクエストを処理するCompare : モデル内の 2 つのプロパティが一致するかどうかを検証します。EmailAddress : プロパティに電子メール形式があるかどうかを検証します。Phone : プロパティに電話番号形式があるかどうかを検証します。Range : プロパティ値が指定された範囲内にあるかどうかを検証します。RegularExpression : プロパティ値が指定された正規表現と一致するかどうかを検証します。Required : フィールドが null でないかどうかを検証します。StringLength : 文字列プロパティ値が指定された長さ制限を超えていないかどうかを検証します。Url : プロパティが URL 形式であるかどうかを検証します。IHttpClientFactory.CreateClient();を使用して基本的な IHttpClientFactory を作成します。gzipアルゴリズムを使用して応答圧縮を追加するAspNetCoreRateLimit nuget パッケージとメモリ プロバイダーを使用したレート制限。AspNetCoreRateLimitおよびAspNetCoreRateLimit.Redis nuget パッケージを使用したレート制限。ILogger<T>拡張メソッドを使用してログを記録するlogger.LogTraceログ トレース レベル メッセージlogger.LogDebugログのデバッグ レベルのメッセージlogger.LogInformationログ情報レベルのメッセージlogger.Warningログの警告レベルのメッセージlogger.Errorログのエラー レベル メッセージlogger.Criticalログのクリティカル レベルのメッセージAzure AppInsights SDK を使用してログを記録するIHostedServiceインターフェイスを使用してホストされたサービスを実装するBackgroundServiceクラスをオーバーライドしてバックグラウンド サービスを実装するSwashbuckle.AspNetCore nuget をインストールしますswagger.jsonルート レベルから提供するように swagger ルート プレフィックスを変更しますASP.NET 6 API アプリケーションでのデータ アクセス
Micro ORM Dapper と PostgreSQL を使用したデータ アクセス
/api/Persons?page=1&limit=10/api/Persons?searchAfter=4499b79a-c710-45e4-ba87-083d22c4d6ad_2023-04-17T12:00:25&limit=10/api/Persons/b1333cad-9d7c-4a64-8823-db8c9aa55646でシングルを取得/api/Personsを作成する/api/Persons/b1333cad-9d7c-4a64-8823-db8c9aa55646を更新します。/api/Persons/b1333cad-9d7c-4a64-8823-db8c9aa55646を削除していますEF Core 6 ORM と PostgreSQL を使用したデータ アクセス
DbSet<T>を追加しますDbContext分析するidempotentオプションを使用して移行を追加する/api/Employees?page=1&limit=10/api/Employees?searchAfter=4499b79a-c710-45e4-ba87-083d22c4d6ad_2023-04-17T12:00:25&limit=10/api/Employees/b1333cad-9d7c-4a64-8823-db8c9aa55646で単一を取得/api/Employeesを作成する/api/Employees/b1333cad-9d7c-4a64-8823-db8c9aa55646を更新します。/api/Employees/b1333cad-9d7c-4a64-8823-db8c9aa55646を削除していますASP.NET 6 API アプリケーションでの応答キャッシュ
IMemoryCacheを使用したメモリ キャッシュの追加StackExchange.Redisを使用して分散キャッシュを追加するASP.NET 6 API アプリケーションのセキュリティ
認証の追加
Claim 、 ClaimsIdentity 、およびClaimsPrincipal理解するBCrypt.Net-Next nuget を使用してプレーン テキスト パスワードをハッシュするSystem.IdentityModel.Tokens.Jwtを使用して JWT を生成する/api/Account/Registerでユーザーを登録します/api/Account/Loginでユーザーをログインし、アクセス トークンとリフレッシュ トークンの初期セットを生成します。/api/Account/Token送信されたリフレッシュ トークンを使用してアクセス トークンをリフレッシュします/api/Account/Revokeでリフレッシュ トークンを取り消します権限の追加
IAuthorizationRequirementインターフェイスを実装するHandleRequirementAsyncをオーバーライドしてカスタム ポリシー要件を作成しますProgram.csにカスタム要件を登録するケーススタディ: Auth0 を使用した JWT 認証とロール認可の追加
ファイルのアップロードとファイルのダウンロードの処理
wwwroot folderに保存する.xlsxファイルを応答にストリーム配信するテスト
単体テスト
xUnit.net使用して単体テストを追加する[Fact]と[Theory]を理解するDisposeメソッドを使用してテスト データをクリーンアップする[InlineData]を使用してプリミティブ パラメーターを渡します[MemberData]を使用してプリミティブおよび複雑なパラメータを渡します[ClassData]使用してプリミティブおよび複雑なパラメーターを渡しますIClassFixture使用して同じクラスでテスト コンテキストを共有するICollectionFixtureを使用して複数のクラス間でテスト コンテキストを共有するMoqを使用して依存関係サービスをモックするVerify()またはVerifyAll()を使用してモックされたサービスが呼び出されたかどうかを確認します。統合テスト
WebApplicationFactory<TStartup>を継承してカスタム Web アプリケーション ファクトリを作成するxUnit.net使用して API の統合テストを作成するgRPC と HTTP2 を使用した同期サービス間通信
メッセージキューを使用した非同期サービス間通信
ASP.NET 6 API アプリケーションのホスティング