ASP.NET Core Web API コントローラー
前の演習では、サンプルの天気予報データを提供する Web アプリケーションを作成してから、HTTP Read-Eval-Print Loop (REPL) でそれを操作しました。
独自の PizzaController
クラスの記述を始める前に、WeatherController
サンプルのコードを見て、それがどのように動作するのかを理解しましょう。 このユニットでは、WeatherController
で ControllerBase
基底クラスといくつかの .NET 属性を使って、機能する Web API を数十行のコードで作成する方法を学習します。 これらの概念を理解すると、独自の PizzaController
クラスを記述できるようになります。
WeatherController
クラス全体のコードは次のとおりです。 まだわからなくても心配しないでください。 順を追って説明します。
using Microsoft.AspNetCore.Mvc;
namespace ContosoPizza.Controllers;
[ApiController]
[Route("[controller]")]
public class WeatherForecastController : ControllerBase
{
private static readonly string[] Summaries = new[]
{
"Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"
};
private readonly ILogger<WeatherForecastController> _logger;
public WeatherForecastController(ILogger<WeatherForecastController> logger)
{
_logger = logger;
}
[HttpGet(Name = "GetWeatherForecast")]
public IEnumerable<WeatherForecast> Get()
{
return Enumerable.Range(1, 5).Select(index => new WeatherForecast
{
Date = DateTime.Now.AddDays(index),
TemperatureC = Random.Shared.Next(-20, 55),
Summary = Summaries[Random.Shared.Next(Summaries.Length)]
})
.ToArray();
}
}
基底クラス: ControllerBase
controller は、"アクション" と呼ばれる 1 つまたは複数のパブリック メソッドを含むパブリック クラスです。 規約により、コントローラーはプロジェクト ルートの Controllers ディレクトリに配置します。 アクションは、ルーティングによって HTTP エンドポイントとして公開されます。 そのため、https://localhost:{PORT}/weatherforecast
への HTTP GET
要求によって、WeatherForecastController
クラスの Get()
メソッドが実行されます。
最初に気付くことは、このクラスが ControllerBase
基底クラスから継承されていることです。 この基底クラスには、HTTP 要求を処理するための標準機能が多く用意されているので、自分のアプリケーションの特定のビジネス ロジックに集中できます。
Note
ASP.NET Core で Razor Pages または Model-View-Controller (MVC) アーキテクチャの開発の経験があるなら、Controller
クラスを使用しています。 Controller
クラスから派生させて Web API のコントローラーを作成しないでください。 Controller
は ControllerBase
から派生し、ビューのサポートが追加されているので、Web API 要求ではなく、Web ページの処理に使用するためのものです。
API コントローラー クラスの属性
次のコードで示すように、WeatherForecastController
には 2 つの重要な属性が適用されています。
[ApiController]
[Route("[controller]")]
public class WeatherForecastController : ControllerBase
[ApiController]
は、Web API のビルドを簡単にする厳格な動作を有効にします。 動作には、"パラメーター ソース推論"、"要件としての属性ルーティング"、"モデル検証エラー処理" の拡張などが含まれます*。
[Route]
では、ルーティング パターン [controller]
が定義されています。 [controller]
トークンはコントローラーの名前 (大文字と小文字の区別はなく、Controller サフィックスはなし) に置き換えられます。 このコントローラーは、https://localhost:{PORT}/weatherforecast
への要求を処理します。
Note
ルートには、api/[controller]
のように、静的な文字列が含まれる場合があります。 この例では、このコントローラーによって https://localhost:{PORT}/api/weatherforecast
への要求が処理されます。
Get()
メソッドを使用して天気の結果を提供する
WeatherForecastController
には、[HttpGet(Name = "GetWeatherForecast")]
属性で指定される、単一のコントローラー アクションが含まれています。 この属性により、HTTP GET
要求が public IEnumerable<WeatherForecast> Get()
メソッドにルーティングされます。 前の演習で確認したように、https://localhost:{PORT}/weatherforecast
に対する要求によって天気の結果が返されました。
このモジュールで後ほど学習するように、CRUD 操作 (GET
、PUT
、POST
、DELETE
) を実行する Web API には、他の一般的なアクションが関連付けられています。 ただし、API コントローラーで実装する必要があるのは、1 つのコントローラー アクションだけです。
この例では、返された WeatherForecast
項目の完全なリストを取得しています。 GET
操作では、識別子を渡すことで単一の項目を取得することもできます。 ASP.NET では、[HttpGet("{id}")]
属性を使って 1 つの項目を取得できます。 次の演習ではその属性を実装します。
Web API コントローラーの基本コンポーネントについて学習したので、独自の PizzaController
クラスを作成する準備ができました。