Skip to content

MVC編:移行と現代的な Web 開発

ASP.NET Core MVC による Web アプリケーション開発と、従来の ASP.NET MVC 5 からの移行方法を解説します。

ASP.NET MVC 5 から ASP.NET Core MVC への移行

.NET Framework 4.8.1 上の ASP.NET MVC 5 アプリケーションを ASP.NET Core MVC へ移行する際、いくつかの重要な違いがあります。

  • Global.asax の廃止

    アプリケーション起動時の処理などを行っていた Global.asax は廃止されました。これらの初期化処理はすべて Program.cs に記述します。

  • ルーティング設定の統合

    RouteConfig.cs にルーティングを記述する代わりに、Program.cs の中で MapControllerRoute を使用して設定します。または、コントローラーのクラスやメソッドに直接 [Route("...")] 属性を付与する「属性ルーティング」も広く使われます。

  • コントローラーの基本クラス

    System.Web.Mvc.Controller から Microsoft.AspNetCore.Mvc.Controller へと変更されました。メソッドが返す結果の型も、ActionResult から IActionResult インターフェースへと統一されています。

タグヘルパーとビュー開発の進化

画面を作成する Razor ビューでは、従来の HTML ヘルパーに代わり、「タグヘルパー」という仕組みが導入されました。

  • HTML ヘルパー (従来)

    C# のコードに近い書き方をしていました。

razor
@Html.LabelFor(m => m.UserName)
@Html.TextBoxFor(m => m.UserName, new { @class = "form-control" })
  • タグヘルパー (現代)

    HTML タグの属性として記述できるため、デザイン崩れが起きにくく、デザイナーにとっても読み書きしやすいのが特徴です。

razor
<label asp-for="UserName"></label>
<input asp-for="UserName" class="form-control" />

標準で多くの便利なタグヘルパーが用意されているほか、開発者が独自のカスタムタグヘルパーを作成することも可能です。

状態管理とセキュリティの変更

セッションの管理やセキュリティ対策の記述方法も変更されました。

  • セッション状態の利用

    ASP.NET Core では、セッション機能は標準で無効になっています。利用するには、Program.cs でセッションのサービスを明示的に登録し、ミドルウェアを有効にする必要があります。また、分散キャッシュ(Redis など)を使ったスケールアウトが容易になりました。

  • 認証と認可の統合

    以前の Forms 認証は廃止され、Cookie 認証や ASP.NET Core Identity という統合されたセキュリティシステムが使われます。ロールやクレーム(ユーザーの属性情報)に基づいた細やかなアクセス制御が可能です。

  • セキュリティ対策

    CSRF (クロスサイトリクエストフォージェリ) 対策として、タグヘルパーを使用するだけで自動的に検証用トークンがフォームに埋め込まれます。コントローラー側で [ValidateAntiForgeryToken] 属性を付与することで、安全なリクエスト処理が行えます。

構成管理と環境設定

設定ファイルの扱い方が web.config から appsettings.json に変わりました。

  • JSON 形式への移行と階層構造

    設定情報は XML 形式の web.config ではなく、JSON 形式の appsettings.json に記述します。値の階層構造を表現しやすくなりました。

  • 型安全な設定の読み込み

    設定値を C# のクラス(POCO)に自動的に割り当てる「オプションパターン」が標準でサポートされています。DI を介して、型安全に設定値を取り出すことができます。

  • シークレット情報の管理

    開発用のデータベース接続文字列などの機密情報は、プロジェクトファイルの外にある「ユーザーシークレット (User Secrets)」に保存します。これにより、誤って機密情報を Git 等のソースコード管理に登録してしまうリスクを防げます。