ASP.NET Core Web API コントローラー

完了

前の演習では、サンプルの天気予報データを提供する Web アプリケーションを作成してから、HTTP Read-Eval-Print Loop (REPL) でそれを操作しました。

独自の PizzaController クラスの記述を始める前に、WeatherController サンプルのコードを見て、それがどのように動作するのかを理解しましょう。 このユニットでは、WeatherControllerControllerBase 基底クラスといくつかの .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 のコントローラーを作成しないでください。 ControllerControllerBase から派生し、ビューのサポートが追加されているので、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 操作 (GETPUTPOSTDELETE) を実行する Web API には、他の一般的なアクションが関連付けられています。 ただし、API コントローラーで実装する必要があるのは、1 つのコントローラー アクションだけです。

この例では、返された WeatherForecast 項目の完全なリストを取得しています。 GET 操作では、識別子を渡すことで単一の項目を取得することもできます。 ASP.NET では、[HttpGet("{id}")] 属性を使って 1 つの項目を取得できます。 次の演習ではその属性を実装します。

Web API コントローラーの基本コンポーネントについて学習したので、独自の PizzaController クラスを作成する準備ができました。

自分の知識をチェックする

1.

[ApiController] 属性の目的は何ですか。