ASP.NET Core/構成要素
ASP.NET Coreは、モダンなWebアプリケーションを構築するためのオープンソースでクロスプラットフォームのフレームワークです。その構成要素は、フレームワーク全体の柔軟性と拡張性を支える重要な部分を成しています。
以下に、ASP.NET Coreの主な構成要素を説明します。
ホスティング (Hosting)
[編集]ASP.NET Coreアプリケーションは、ホストを構築することで実行されます。ホストはアプリケーションの起動とライフサイクルの管理を行います。
IHostとWebHostIHost: 汎用ホストで、Webアプリ以外のバックグラウンドサービスでも利用可能。WebHost: Webアプリケーション専用で、HTTPサーバーを提供。
Kestrel- ASP.NET CoreのデフォルトのWebサーバー。軽量で高性能です。
- IISとの統合
- Windows環境では、IISをリバースプロキシとして使用できます。
ミドルウェア (Middleware)
[編集]ASP.NET Coreでは、ミドルウェアがリクエストとレスポンスを処理します。 ミドルウェアはパイプラインとして構築され、リクエストがパイプラインを通過する際に処理が行われます。
- ミドルウェアの役割:
- 認証や認可
- ロギング
- エラーハンドリング
- 静的ファイルの提供
- ミドルウェアの例:
app.Use(async (context, next) => { // リクエスト処理前 await next(); // リクエスト処理後 }); app.UseStaticFiles(); // 静的ファイルの提供
ルーティング (Routing)
[編集]ルーティングは、HTTPリクエストを適切なエンドポイントにマッピングする仕組みです。
- 属性ルーティング: コントローラーやアクションにルート情報を付与。
[Route("api/[controller]")] public class HomeController : Controller { [HttpGet("{id}")] public IActionResult Get(int id) => Ok(id); }
- コンベンションベースのルーティング: グローバルにルールを設定。
app.UseRouting(); app.UseEndpoints(endpoints => { endpoints.MapControllerRoute( name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"); });
MVCとRazor Pages
[編集]ASP.NET Coreは、MVCとRazor Pagesという2つの主要な開発モデルを提供します。
(1) MVC
[編集]- Model: アプリケーションのデータやビジネスロジックを管理。
- View: ユーザーに表示されるUI(Razorテンプレートを使用)。
- Controller: リクエストを受け取り、適切なレスポンスを生成。
public class HomeController : Controller { public IActionResult Index() { return View(); } }
(2) Razor Pages
[編集]- ページ単位で構築されるシンプルなモデル。
- コントローラーを必要とせず、ページモデルとビューが直接関連付けられる。
@page @model IndexModel <h1>Hello, @Model.Name</h1>
DI(依存性注入)
[編集]ASP.NET Coreは、依存性注入(Dependency Injection)をネイティブでサポートしています。
- サービスの登録:
AddSingleton: アプリ全体で1つのインスタンスを共有。AddScoped: HTTPリクエストごとに新しいインスタンスを作成。AddTransient: リクエストごとに新しいインスタンスを作成。
- 利用例:
public void ConfigureServices(IServiceCollection services) { services.AddScoped<IMyService, MyService>(); } public class HomeController : Controller { private readonly IMyService _service; public HomeController(IMyService service) { _service = service; } }
認証と認可
[編集]セキュアなアプリケーションを構築するために、認証(Authentication)と認可(Authorization)を提供します。
- 認証方式:
- Cookie認証
- JWTトークン認証
- OAuth/OpenID Connect
- ポリシーベースの認可:
services.AddAuthorization(options => { options.AddPolicy("AdminOnly", policy => policy.RequireClaim("Role", "Admin")); });
構成 (Configuration)
[編集]ASP.NET Coreは柔軟な構成システムを提供します。
- 構成ソース:
appsettings.json- 環境変数
- コマンドライン引数
- 例:
{ "ConnectionStrings": { "DefaultConnection": "Server=localhost;Database=app;User Id=sa;Password=your_password;" } }
var connectionString = Configuration.GetConnectionString("DefaultConnection");
ログ記録 (Logging)
[編集]ASP.NET Coreには、組み込みのロギングシステムがあり、アプリケーションの動作状況を記録できます。
- 主要なロギングプロバイダー:
- Console
- Debug
- Application Insights
public void Configure(IApplicationBuilder app, ILogger<Startup> logger) { app.Use(async (context, next) => { logger.LogInformation("Handling request: " + context.Request.Path); await next(); logger.LogInformation("Finished handling request."); }); }
クロスプラットフォーム対応
[編集]ASP.NET Coreは、Windows、Linux、macOSで動作します。また、Dockerを利用したコンテナ化も容易です。
SignalR
[編集]リアルタイムWebアプリケーションを構築するためのライブラリです。
- 例: チャットアプリケーション
- WebSocketやLong Pollingをサポート
services.AddSignalR(); app.UseEndpoints(endpoints => { endpoints.MapHub<ChatHub>("/chatHub"); });
まとめ
[編集]ASP.NET Coreの構成要素は、モダンで柔軟なWebアプリケーションを構築するために必要なすべての機能を網羅しています。ホスティング、ミドルウェア、ルーティング、MVC/Razor Pages、DI、構成、認証/認可、ロギングなど、各要素が一貫性のある設計で統合されており、高い生産性とパフォーマンスを実現します。