演習 - コントローラーを追加する

Controller は、アクション と呼ばれる 1 つまたは複数のパブリック メソッドを含むパブリック クラスです。 規則により、Controller クラスはプロジェクト ルートの Controllers ディレクトリに配置されます。 アクションは、Web API コントローラー内の呼び出し可能な HTTP エンドポイントとして公開されます。

  1. 次のコマンドを実行します。

    touch ./Controllers/ProductsController.cs
    

    ProductsController.cs という名前の空のクラス ファイルが、Controllers ディレクトリに作成されます。 ディレクトリ名 Controllers は規則です。 ディレクトリ名の由来は、Web API で使用されている Model-View-Controller アーキテクチャです。

    注意

    規則により、コントローラー クラスの名前には Controller というサフィックスが付きます。

  2. ファイル エクスプローラーを最新の情報に更新し、次のコードを Controllers/ProductsController.cs に追加します。 変更を保存します。

    using System.Collections.Generic;
    using System.Linq;
    using System.Threading.Tasks;
    using Microsoft.AspNetCore.Mvc;
    using Microsoft.EntityFrameworkCore;
    using ContosoPets.Api.Data;
    using ContosoPets.Api.Models;
    
    namespace ContosoPets.Api.Controllers
    {
        [Route("api/[controller]")]
        [ApiController]
        public class ProductsController : ControllerBase
        {
            private readonly ContosoPetsContext _context;
    
            public ProductsController(ContosoPetsContext context)
            {
                _context = context;
            }
    
            [HttpGet]
            public ActionResult<List<Product>> GetAll() =>
                _context.Products.ToList();
    
            // GET by ID action
    
            // POST action
    
            // PUT action
    
            // DELETE action
        }
    }
    

    このクラスは、Web UI がサポートされていない MVC コントローラーの基底クラスである ControllerBase から派生します。 その動作は次の属性で定義されます。

    • [Route] では、ルーティング パターン api/[controller] が定義されています。 [controller] トークンはコントローラーの名前 (大文字と小文字の区別はなく、Controller サフィックスは付きません) に置き換えられるので、https://localhost:5001/api/products に対する要求はこのコントローラーによって処理されます。
    • [ApiController] では、Web API のビルドを簡単にする動作が追加されます。 動作には、パラメーター ソース推論要件としての属性ルーティングモデル検証エラー処理の拡張などが含まれます。

    クラスの定義では次のことが行われます。

    • コンストラクターの挿入で、ContosoPetsContext のインスタンスがコントローラーに提供されます。
    • すべての製品を取得するために、GetAll という名前の HTTP GET アクションが作成されます。
  3. 次のコマンドを実行して、Web API を開始します。

    dotnet run > ContosoPets.Api.log &
    
  4. 次のコマンドを実行します。

    curl -k -s https://localhost:5001/api/products | jq
    

    ヒント

    Cloud Shell セッションがタイムアウトしている場合は、[再接続] ボタンを選択します。

    次の JSON が返されます。

    [
      {
        "id": 1,
        "name": "Squeaky Bone",
        "price": 20.99
      },
      {
        "id": 2,
        "name": "Knotted Rope",
        "price": 12.99
      }
    ]
    
  5. .NET Core アプリによって生成されたすべてのプロセスを停止します。

    kill $(pidof dotnet)
    

次のユニットでは、製品データに対する CRUD 操作をサポートするためのアクションを、ProductsController に追加します。