コンテンツにスキップ

ASP.NET Core/構成要素

出典: フリー教科書『ウィキブックス(Wikibooks)』

ASP.NET Coreは、モダンなWebアプリケーションを構築するためのオープンソースでクロスプラットフォームのフレームワークです。その構成要素は、フレームワーク全体の柔軟性と拡張性を支える重要な部分を成しています。

以下に、ASP.NET Coreの主な構成要素を説明します。

ホスティング (Hosting)

[編集]

ASP.NET Coreアプリケーションは、ホストを構築することで実行されます。ホストはアプリケーションの起動とライフサイクルの管理を行います。

  • IHostWebHost
    • IHost: 汎用ホストで、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は、MVCRazor 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、構成、認証/認可、ロギングなど、各要素が一貫性のある設計で統合されており、高い生産性とパフォーマンスを実現します。