ASP.NET CoreMVCのアクションメソッドにパラメーターを渡す方法

ASP.NET Coreは、高性能Webアプリケーションを構築するための、クロスプラットフォーム、オープンソース、無駄のない、高速なモジュラーフレームワークです。ASP.NET CoreMVCのアクションメソッドにパラメーターを渡す方法はいくつかあります。URL、クエリ文字列、リクエストヘッダー、リクエスト本文、さらにはフォームを介してそれらを渡すことができます。この記事では、これらすべての方法について説明し、コード例を使用して説明します。

この記事で提供されているコード例を使用するには、システムにVisual Studio2019がインストールされている必要があります。まだコピーをお持ちでない場合は、こちらからVisual Studio2019をダウンロードできます。 

Visual Studio2019でASP.NETCoreMVCプロジェクトを作成します

まず、Visual Studio2019でASP.NETCoreプロジェクトを作成しましょう。VisualStudio2019がシステムにインストールされていると仮定して、以下に概説する手順に従って、VisualStudioで新しいASP.NETCoreプロジェクトを作成します。

  1. Visual StudioIDEを起動します。
  2. 「新しいプロジェクトの作成」をクリックします。
  3. [新しいプロジェクトの作成]ウィンドウで、表示されたテンプレートのリストから[ASP.NET CoreWebアプリケーション]を選択します。
  4. [次へ]をクリックします。
  5. 「新しいプロジェクトの構成」ウィンドウで、新しいプロジェクトの名前と場所を指定します。
  6. 必要に応じて、[ソリューションとプロジェクトを同じディレクトリに配置する]チェックボックスをオンにします。
  7. [作成]をクリックします。
  8. 次に示す[新しいASP.NETCore Webアプリケーションの作成]ウィンドウで、ランタイムとして.NET Coreを選択し、上部のドロップダウンリストからASP.NET Core 3.1(またはそれ以降)を選択します。
  9. プロジェクトテンプレートとして「Webアプリケーション(Model-View-Controller)」を選択して、新しいASP.NET CoreMVCアプリケーションを作成します。 
  10. ここではこれらの機能を使用しないため、[Dockerサポートを有効にする]チェックボックスと[HTTPS用に構成する]チェックボックスがオフになっていることを確認してください。
  11. 認証も使用しないため、[認証]が[認証なし]に設定されていることを確認してください。
  12. [作成]をクリックします。

これらの手順に従うと、Visual Studio2019で新しいASP.NETCore MVCプロジェクトが作成されます。以下のセクションでこのプロジェクトを使用して、ASP.NET Core3.1のアクションメソッドにパラメーターを渡すさまざまな方法を説明します。

ASP.NET CoreMVCでAuthorRepositoryクラスを作成します

この例では、リポジトリクラスを使用します—コントローラーのアクションメソッドは、CRUD操作のためにリポジトリクラスのメソッドと相互作用します。以下に示すコードスニペットに示すように、簡単にするために、最初に最小限のプロパティでAuthorという名前のモデルクラスを作成します。

    パブリッククラス作成者

    {{

        public int Id {get; セットする; }

        public string FirstName {get; セットする; }

        パブリック文字列LastName {get; セットする; }

    }

AuthorRepositoryクラスには、ジェネリックリストからAuthorクラスのインスタンスを取得するためのメソッドと、ジェネリックリストにAuthorクラスの新しいインスタンスを追加するためのメソッドが含まれています。GetAuthorsメソッドは、データのページを返します。ページ番号は引数として渡されます。

    パブリッククラスAuthorRepository

    {{

        リスト作成者= new List()

        {{

            新しい著者

            {{

                Id = 1、

                FirstName = "Joydip"、

                LastName = "Kanjilal"

            }、

            新しい著者

            {{

                Id = 2、

                FirstName = "Steve"、

                LastName = "Smith"

            }

        };

        public Author GetAuthor(int id)

        {{

            authors.FirstOrDefault(a => a.Id == id);を返します。

        }

        public List GetAuthors(int pageNumber = 1)

        {{

            int pageSize = 10;

            int skip = pageSize *(pageNumber-1);

            if(authors.Count <pageSize)

                pageSize = authors.Count;

            帰国者

              .Skip(スキップ)

              .Take(pageSize).ToList();

        }

        public bool Save(作成者作成者)

        {{

            var result = authors.Where(a => a.Id == author.Id);

            if(result!= null)

            {{

                if(result.Count()== 0)

                {{

                    authors.Add(author);

                    trueを返します。

                }

            }

            falseを返します。

        }

    }

ASP.NET CoreMVCのURLを介してパラメーターを渡す

パラメータをアクションメソッドに渡す最も簡単で簡単な方法の1つは、URLを介してパラメータを渡すことです。次のコードスニペットは、URLでパラメーターを渡す方法を示しています。

[HttpGet]

[Route( "Default / GetAuthor / {authorId:int}")]

public IActionResult GetAuthor(int authorId)

{{

   var data = authorRepository.GetAuthor(authorId);

   View(data);を返します。

}

エンドポイントへのURLは次のとおりです。

GET:// localhost:8061 / Default / GetAuthor / 1

ASP.NET CoreMVCのクエリ文字列を介してパラメーターを渡す

クエリ文字列でパラメータを渡すことも別のオプションです。ルーティング情報を変更する必要がないため、下位互換性があります。アクションメソッドのクエリ文字列を介してパラメータを渡す方法を示す次のコードスニペットについて考えてみます。

[HttpGet]

[Route( "Default / GetAuthors / {pageNumber:int}")]

public IActionResult GetAuthors([FromQuery

(Name = "pageNumber")] int pageNumber = 1)

{{

   var data = authorRepository.GetAuthors(pageNumber);

   Ok(data);を返します。

}

このエンドポイントにアクセスするためのURLは次のとおりです。

GET:// localhost:8061 / Default / GetAuthors?p​​ageNumber = 1

GetAuthorsメソッドは、クエリ文字列を介して送信される引数としてページ番号を受け入れます。pageNumberはオプションのパラメーターであることに注意してください。このメソッドにパラメーターが渡されない場合、ページ番号は1として解釈されます。このメソッドは、指定されたページの作成者レコードを返します。この例では、データストアに100人の著者レコードがあり、ページ番号が3の場合、このメソッドはレコード31から40を返します(ページあたりの著者数はハードコーディングされていることに注意してください。 AuthorRepositoryクラス。)

ASP.NET CoreMVCのリクエストヘッダーを介してパラメーターを渡す

リクエストヘッダーは、アクションメソッドにパラメーターを渡すためのさらに別のオプションです。これの一般的な使用例は、資格情報またはその他の秘密データをネットワーク経由で渡すことです。次のコードスニペットは、クレジットカード番号をパラメーターとして受け取り、クレジットカード番号が有効な場合にtrueを返すアクションメソッドを示しています。

[HttpGet]

[Route( "Default / IsCreditCardValid / {creditCardNumber}")]

public IActionResult IsCreditCardValid([FromHeader] string creditCardNumber)

{{

   文字列regexExpression =

   "^(?:(?4 [0-9] {12}(?:[0-9] {3})?)|" +

   "(?5 [1-5] [0-9] {14})|" +

   "(?3 [47] [0-9] {13})|)$";

   正規表現regex = new Regex(regexExpression);

   var match = regex.Match(creditCardNumber);

   Ok(match.Success);を返します。

}

簡単にするために、IsCreditCardValidアクションメソッドは、Visa、MasterCard、およびAmexクレジットカードのみを検証します。IsCreditCardValidメソッドを拡張して、他のカードタイプを検証できます。クレジットカード番号は安全に渡される必要があるため、ここではリクエストヘッダーを使用することをお勧めします。図1は、リクエストヘッダーを介してクレジットカード番号をパラメーターとして指定する方法を示しています。

ASP.NET CoreMVCのリクエスト本文を介してパラメーターを渡す

挿入または更新操作を実行するときに、リクエスト本文を介してパラメータを渡す必要があることがよくあります。次のコードスニペットは、リクエストの本文を介してAuthorクラスのインスタンスを渡す方法を示しています。

[HttpPost]

[Route( "Default / Insert")]

public IActionResult Insert([FromBody] Author author)

{{

   Ok(authorRepository.Save(author));を返します。

}

図2は、リクエスト本文に挿入するデータを指定する方法を示しています。

DefaultControllerクラスの完全なソースコード

DefaultControllerクラスの完全なコードは、参照用に以下に提供されています。

 パブリッククラスDefaultController:コントローラー

    {{

        プライベート読み取り専用AuthorRepositoryauthorRepository =

        新しいAuthorRepository();

        [HttpGet]

        [Route( "Default / GetAuthor / {authorId:int}")]

        public IActionResult GetAuthor(int authorId)

        {{

            var data = authorRepository.GetAuthor(authorId);

            Ok(data);を返します。

        }

        [HttpGet]

        [Route( "Default / GetAuthors / {pageNumber:int}")]

        public IActionResult GetAuthors([FromQuery

        (Name = "pageNumber")] int pageNumber = 1)

        {{

            var data = authorRepository.GetAuthors(pageNumber);

            Ok(data);を返します。

        }

        [HttpGet]

        [Route( "Default / IsCreditCardValid / {creditCardNumber}")]

        public IActionResult IsCreditCardValid

        ([FromHeader]文字列creditCardNumber)

        {{

            文字列regexExpression =

            "^(?:(?4 [0-9] {12}(?:[0-9] {3})?)|" +

            "(?5 [1-5] [0-9] {14})|" +

            "(?3 [47] [0-9] {13})|)$";

            正規表現regex = new Regex(regexExpression);

            var match = regex.Match(creditCardNumber);

            Ok(match.Success);を返します。

        }

        [HttpPost]

        [Route( "Default / Insert")]

        public IActionResult Insert([FromBody] Author author)

        {{

            Ok(authorRepository.Save(author));を返します。

        }

    }

最後に、フォームを介してパラメーターを渡すこともできます。フォームは、ファイルをアップロードするときによく使用されます。この場合、IFormFileインターフェイスを利用する必要があります。 

ASP.NET Coreでさらに多くのことを行う方法:

  • ASP.NETCoreでAPIアナライザーを使用する方法
  • ASP.NETCoreでルートデータトークンを使用する方法
  • ASP.NETCoreでAPIバージョン管理を使用する方法
  • ASP.NET Core3.1でデータ転送オブジェクトを使用する方法
  • ASP.NET CoreMVCで404エラーを処理する方法
  • ASP.NET Core3.1のアクションフィルターで依存性注入を使用する方法
  • ASP.NETCoreでオプションパターンを使用する方法
  • ASP.NET Core 3.0MVCでエンドポイントルーティングを使用する方法
  • ASP.NET Core3.0でExcelにデータをエクスポートする方法
  • ASP.NET Core3.0でLoggerMessageを使用する方法
  • ASP.NETCoreで電子メールを送信する方法
  • ASP.NETCoreでSQLServerにデータを記録する方法
  • ASP.NETCoreでQuartz.NETを使用してジョブをスケジュールする方法
  • ASP.NET Core WebAPIからデータを返す方法
  • ASP.NETCoreで応答データをフォーマットする方法
  • RestSharpを使用してASP.NETCore WebAPIを使用する方法
  • Dapperを使用して非同期操作を実行する方法
  • ASP.NETCoreで機能フラグを使用する方法
  • ASP.NETCoreでFromServices属性を使用する方法
  • ASP.NETCoreでCookieを操作する方法
  • ASP.NETCoreで静的ファイルを操作する方法
  • ASP.NETCoreでURL書き換えミドルウェアを使用する方法
  • ASP.NETCoreでレート制限を実装する方法
  • ASP.NETCoreでAzureApplicationInsightsを使用する方法
  • ASP.NETCoreで高度なNLog機能を使用する
  • ASP.NET WebAPIでエラーを処理する方法
  • ASP.NET CoreMVCでグローバル例外処理を実装する方法
  • ASP.NET CoreMVCでnull値を処理する方法
  • ASP.NET Core WebAPIの高度なバージョン管理
  • ASP.NETCoreでワーカーサービスを操作する方法
  • ASP.NETCoreでDataProtectionAPIを使用する方法
  • ASP.NETCoreで条件付きミドルウェアを使用する方法
  • ASP.NETCoreでセッション状態を操作する方法
  • ASP.NETCoreで効率的なコントローラーを作成する方法