ASP.NET MVC（.NET Framework）記載まとめ　【初学者編】1


##    はじめに
C#のWebアプリケーションのフレームワークである 
ASP.NET MVCプロジェクト（.NET Frameworkベース）を作成手順まとめです。

--------------------------------------------------------------


## <font color="green">①開発フォルダの作成とプロジェクトの作成</font>

   1･･･ エクスプローラーで C:\temp\ASP.NET フォルダを作成します。

   2･･･ Visual Studioをインストール
       以下のwinget search コマンドで
       インストールするパッケージの ID を確認:

   3･･･ 確認した ID を使ってインストールコマンドを実行する:
       例えば、ID が Microsoft.VisualStudio.2022 であれば、
       次のようにインストールします:。

````
winget install Microsoft.VisualStudio.2022.Community
````

   4･･･ ワークロードの選択
````

Visual Studio Installerでプロジェクトに必要なワークロード（開発に必要なツールやコンポーネントのセット）を選択します。従来のASP.NET MVCプロジェクト（.NET Frameworkベース）を作成する場合には、以下のワークロードが必須です。

ASP.NETおよびWeb開発

　目的:
　　ASP.NETやHTML、CSS、JavaScriptを使用したWebアプリケーションの開発に必要なツールをインストールします。

　詳細:
　　ASP.NET MVC (.NET Framework)を使用したWebアプリケーションの開発に必要なWebサーバー、ブラウザテストツール、デバッグツールが含まれています。

.NETデスクトップ開発

　目的:
　　.NET Frameworkを使用したデスクトップアプリケーションやコンソールアプリケーションの開発に必要なツールをインストールします。

　詳細:
　　ASP.NET MVCは.NET Frameworkに基づいているため、このワークロードも必要です。
````
````
 個別コンポーネントの選択
ワークロードを選択した後、必要なコンポーネントがインストールされますが、特定のプロジェクトで必要な個別コンポーネントを追加することもできます。以下は、ASP.NET MVCプロジェクトに関連する個別コンポーネントの例です。

.NET Framework 4.x
目的: ASP.NET MVC (.NET Framework) のバージョンによっては、特定の.NET Frameworkのバージョンが必要です。
````
````
補足: どのNET Framework**を選択するかは、
開発するアプリケーションの要件や互換性によって変わりますが、
いくつかの指針に従えば適切な選択ができます。
````
````
　●既存のプロジェクトとの互換性
　　既存のプロジェクトやライブラリを使っている場合、
　　そのプロジェクトがターゲットとしている**.NET Frameworkのバージョン**に合わせる必要があります。
````
````
　　.NET Framework 4.5以降が多くの現行のプロジェクトでサポートされていますが、
　　もしレガシーなプロジェクトに依存しているなら、さらに古いバージョンを使う可能性もあります。

　●新しい開発を始める場合
　　もし新しいプロジェクトを開発する場合、できるだけ最新の安定バージョンを
　　選ぶのがベストです。具体的には次のバージョンが推奨されます：

　　　.NET Framework 4.8

　　　これは最終バージョンで、今後はこれ以上新しい.NET Frameworkのバージョンが
　　　リリースされません。Windows環境での長期的な安定性と互換性を確保するため、
　　　4.8はWindowsアプリケーションの新規開発で最も推奨されるバージョンです。

　　　.NET 5/6/7以降

　　　.NET Coreや.NET Frameworkの後継として、.NET 5以降（最新は.NET 7や.NET 8）に
　　　移行することも検討に値します。
　　　
　　　.NET 5以降は、クロスプラットフォーム対応が可能であり、
　　　Windows以外の環境（Linux、macOS）にも対応しています。
　　　ただし、これは.NET Frameworkの後継であるため、
　　　以前の.NET Framework用のライブラリや依存関係が多い場合には注意が必要です。

　●サポートと長期的な互換性
　　.NET Framework 4.8は、Windowsのサポートが続く限り、
　　長期間サポートされる予定です。このため、企業システムや大規模アプリケーションであれば、このバージョンが無難です。

　　.NET 5/6/7以降は、より頻繁に更新され、
　　パフォーマンスの向上や最新の機能を活用できますが、
　　プラットフォーム全体が進化していくため、新しいバージョンの追随が必要です。

　●ターゲットプラットフォーム
　　Windows専用アプリケーション（特にWPF、WinForms、ASP.NETなど）は、
　　.NET Frameworkが最も適しています。この場合は4.8が最適な選択です。
　　クロスプラットフォームアプリケーション（macOS、Linux、Windows向けに開発する場合）は、
　　.NET 5やそれ以降のバージョン（例: .NET 6や7）を選択した方が柔軟性が高いです。
````
````
　●まとめ
　　新規のWindowsアプリケーションを作成する場合、
　　.NET Framework 4.8を選ぶと、互換性と安定性の面で最も適した選択になります。

　　クロスプラットフォーム対応や、最新の.NETテクノロジーを活用したい場合は、
　　.NET 6/7などのバージョンを選ぶのも良い選択です。
　　選択の際は、プロジェクトの要件と今後のメンテナンス計画を考慮に入れることが大切です。
````

````
IIS Express
　目的:
　　ローカルでWebアプリケーションをテストするための軽量なWebサーバーです。IIS Expressを使って、ローカル環境でASP.NET MVCアプリケーションを実行できます。

NuGet パッケージ マネージャー
　目的:
　　外部ライブラリやパッケージを簡単に管理・インストールするためのツールです。プロジェクトで必要なライブラリ（例えばEntity Frameworkなど）を管理するために必須です。

````


   5･･･ Visual Studioを起動し、「新しいプロジェクトの作成」をクリックします。
   
   6･･･ 「ASP.NET Webアプリケーション (.NET Framework)」を選択し、「次へ」をクリックします。
   
   7･･･ プロジェクト名を「SampleMVCApp」にして、「場所」を C:\temp\ASP.NET に指定します。
   
   8･･･ 「テンプレートの選択」で「MVC」を選択し、「認証なし」を選択して「作成」をクリックします。

   9･･･ PowerShellを使用して自己署名証明書を作成する方法
   
   　　Windows環境では、PowerShellを使って簡単に自己署名証明書を作成できます。以下の手順で進めます。

手順
PowerShellを管理者権限で起動

スタートメニューで「PowerShell」と検索し、右クリックして「管理者として実行」を選択します。
自己署名証明書を作成 以下のPowerShellコマンドを実行して、自己署名証明書を作成します。

````
New-SelfSignedCertificate -DnsName "localhost" -CertStoreLocation "cert:\LocalMachine\My"
````

DnsName には localhost を指定していますが、他のドメイン名を指定することもできます。
証明書は「LocalMachine\My」ストアに保存されます。
証明書を信頼されたルート証明機関にコピー 作成した証明書を信頼されたルート証明機関ストアにコピーする必要があります。

以下のPowerShellコマンドを実行します。

````
$cert = Get-ChildItem -Path cert:\LocalMachine\My | Where-Object { $_.Subject -match "CN=localhost" }
````

````
$cert | Export-Certificate -FilePath "C:\localhost.cer"
````

````
Import-Certificate -FilePath "C:\localhost.cer" -CertStoreLocation cert:\LocalMachine\Root
````
　→　C:\localhost.cerに証明書ファイルをエクスポートし、
　それを信頼されたルート証明機関 (cert:\LocalMachine\Root) に
  インポートしています。


https://knowledge.digicert.com/ja/jp/solution/SO23057



--------------------------------------------------------------

## <font color="green">②プロジェクトのファイル構造</font>
プロジェクトを作成すると、以下のようなファイル構造が生成されます。
````
SampleMVCApp/
 ├ bin/                          // コンパイル後のバイナリ
 ├ Controllers/                  // コントローラーの格納ディレクトリ
 ├ Models/                       // モデルクラスの格納ディレクトリ
 ├ Views/                        // ビューの格納ディレクトリ
 ├ Scripts/                      // JavaScriptファイルの格納ディレクトリ
 ├ Global.asax                   // アプリケーションライフサイクルイベント
 ├ Web.config                    // Webアプリケーションの構成設定
 └ Startup.cs                    // 初期設定ファイル
````

--------------------------------------------------------------

## <font color="green">③コントローラーの作成</font>
Controllers フォルダにある HomeController.cs をコピーし、新しいコントローラー SumController.cs を作成します。以下のコードを使用します。

```C#
using System;
using System.Web.Mvc;

/**
 * MVCフレームワークを使用するために必要な名前空間。
 * 
 * MVCはModel-View-Controllerの略で、
 * ASP.NET MVCアプリケーションの基本的な構成を提供する。
 */

namespace SampleMVCApp.Controllers
{
    /**
     * SampleMVCAppはアプリケーションの名前空間で、
     * Controllersはコントローラークラスが含まれる部分を示す。
     * 
     * コントローラーはHTTPリクエストを処理し、
     * 適切なレスポンス（通常はビュー）を返す役割を持つ。
     */

    public class SumController : Controller
    {
        /**
         * SumControllerはASP.NET MVCのコントローラークラス。
         * 
         * Controllerクラスを継承することで、
         * コントローラーの基本機能
         * （アクションメソッド、モデルバインディング、ビューレンダリングなど）を
         * 使用できるようになる。
         */

        // Indexアクション
        public ActionResult Index()
        {
            ViewBag.Message = "Here is 'Sum/Index.cshtml'";

            /** 
             * ViewBagは動的なオブジェクトで、
             * コントローラーからビューへデータを渡すために使用される。
             * ここでは"Here is 'Sum/Index.cshtml'"というメッセージを
             * ビューに渡している。 
             */

            return View(); // Indexビューをレンダリング
        }

        /** 
         * sayHelloアクションメソッドは、param1という名前の文字列引数を受け取る。
         * ユーザーがURLまたはフォームからデータを送信した場合、
         * そのデータがこのメソッドに渡される。 
         */

        // sayHelloアクション
        public ActionResult sayHello(string param1)
        {
            int number;

            if (int.TryParse(param1, out number))
            {
                // 数字が有効な場合、計算結果を返す
                ViewBag.Message = "計算結果: " + Calc(number);
            }
            else
            {
                // 無効な入力の場合、チェック結果を表示
                ViewBag.Message = "計算不可: " + Check(param1);
            }

            return View("Index"); // "Index"ビューを表示
        }

        // Calcメソッド: 入力値の総和を計算
        public int Calc(int num)
        {
            int sum = 0;
            for (int i = 1; i <= num; i++)
            {
                sum += i;  // 1からnumまでの数値を足し合わせていく。
            }
            return sum;  // 計算された総和を返す。
        }

        /** 
         * Checkメソッドは、文字列がnullまたは
         * 空文字であるかどうかを検証し、その結果を返す。
         */

        // Checkメソッド: 入力のバリデーション
        public string Check(string input)
        {
            if (string.IsNullOrWhiteSpace(input))
            {
                return "null または 空文字";  // 入力が無効な場合のメッセージを返す。
            }
            return input;  // 入力が有効な場合はそのまま返す。
        }
    }
}
````

--------------------------------------------------------------


## <font color="green">④ビューの作成</font>
Views フォルダに Sum フォルダを作成します。
Sum フォルダ内に新しいビュー Index.cshtml を作成します。以下のコードを使用します。
```xml
@{
    ViewBag.Title = "Sum Page"; // ビューのタイトルを設定
}

<h3>このビューは、SumコントローラーのIndexアクションから表示される。<br></h3>
<h3>ViewBag.Messageを使用して、コントローラーから渡されたメッセージを表示する。<br></h3>

<h2>次のURLを使用してsayHelloアクションを呼び出すことができます:<br></h2>
<h2>http://localhost:xxxxx/sum/sayHello?param1=6<br></h2>


<div class="text-center">
    <h1 class="display-4">Welcome to Sum Page</h1> <!-- ページタイトル -->
    <h2>@ViewBag.Message</h2> <!-- コントローラーからのメッセージを表示 -->
</div>
````


--------------------------------------------------------------

## <font color="green">⑤スタートページに設定</font>
RouteConfig.cs ファイルを開きます。このファイルは通常、App_Start フォルダにあります。


```C#
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing;

namespace SampleMVCApp
{
    public class RouteConfig
    {
        public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

            // スタートページを指定
            routes.MapRoute(
            
                name: "DefaultStart",
            
                url: "", // 空のURLでルートを定義

                // デフォルトアクションとパラメータ
                defaults: new { controller = "Sum", action = "sayHello", param1 = 5 }


            );

            // 既存のデフォルトルート
            routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}/{id}",
                defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
            );

        }
    }
}
````
--------------------------------------------------------------


## 元サイト（サブアカウント）

   https://qiita.com/nekoozi/items/3f3d34295fb569548989

   https://qiita.com/nekoozi/items/8abd289764232e8ae72a
   
------------------------------------

   次回：ASP.NET MVC（.NET Framework）記載まとめ　【初学者編】2

https://qiita.com/nano357/items/4b145b9c16710786ad07

--------------------------------------------------------------