コントローラーを利用したシンプルな ASP.NET Core Web API アプリケーションの作成
コントローラーを利用したシンプルな ASP.NET Core Web API アプリケーションのコードを紹介します。
概要
こちらの記事では、ASP.NET Core のシンプルなWeb APIアプリケーションのコードを紹介しました。
紹介した方法でWeb APIアプリケーションは作成できますが、コードのファイルを分けたり、複数のエンドポイントを実装する場合には、
コントローラーを利用したほうが便利です。この記事では、コントローラーを利用した、ASP.NET Web APIアプリケーションの作成手順とコードを紹介します。
プログラム例
プロジェクトの作成
新しいプロジェクトを作成します。
"ASP.NET" で検索し、[ASP.NET Core (空)]のテンプレートを選択します。選択後ダイアログ右下の[次へ]ボタンをクリックします。
[新しいプロジェクトを構成します]の画面が表示されます。プロジェクト名を設定します。設定後[次へ]ボタンをクリックします。
[追加情報]の画面が表示されます。今回はフレームワークを .NET 6.0 に設定します。設定ができたら、ダイアログ右下の[作成]ボタンをクリックします。
空のASP.NET アプリケーションのプロジェクトが作成されます。
コントローラーの作成
ソリューションエクスプローラーで作成したプロジェクトのノードをクリックして選択し、右クリックします。
ポップアップメニューが表示されますので、[追加]のサブメニューの[新しいフォルダー]の項目をクリックします。
ソリューションエクスプローラーのプロジェクトの直下にフォルダが作成されます。フォルダ名を "Controllers" に設定します。
作成した Controllersフォルダ内にクラスのcsファイルを作成します。今回は、"MyServiceController.cs" の名称でファイルを作成します。
クラス名もファイル名に従って、MyServiceControllerクラスとなります。
コード
下記のコードを記述します。
レスポンスデータを返すためのレコードです。MyItemの名称で実装します。
namespace SimpleControllerWebAPI
{
public record MyItem(int id, string name);
}
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddControllers();
var app = builder.Build();
app.MapControllers();
app.Run();
コントローラーのコードです。
using Microsoft.AspNetCore.Mvc;
namespace SimpleControllerWebAPI.Controllers
{
[ApiController]
[Route("[controller]")]
public class MyServiceController : ControllerBase
{
private readonly ILogger<MyServiceController> _logger;
public MyServiceController(ILogger<MyServiceController> logger)
{
_logger = logger;
}
public MyItem Get()
{
return new MyItem(148, "ぺんぎんクッキー");
}
}
}
解説
Program.cs
一般的なASP.NET Coreアプリケーションのコードと同じものを利用しますが、下記のコードの
AddControllers
メソッドを呼び出し
コントローラーを利用する状態にします。
builder.Services.AddControllers();
MyServiceController.cs
コントローラーを "MyServiceController" としたため、コントローラーへのアクセスURLは "MyService" の部分が利用され
https://(アプリケーションルート)/MyService
となります。
GetメソッドでAPIのレスポンスの処理を実装します。
レスポンスの処理自体は
こちらの記事で紹介している実装コードと同様です。
public MyItem Get()
{
return new MyItem(148, "ぺんぎんクッキー");
}
実行結果
プロジェクトを実行します。Webブラウザが起動し、アプリケーションルートのURLが表示されます、アプリケーションのルートURLはNot Foundのエラーなります。
URLを
https://(アプリケーションルート)/MyService
に変更してアクセスします。下図の画面が表示されます。
コントローラーのGetメソッドに実装したレスポンス処理が実行されて結果が返されていることが確認できます。
{"id":148,"name":"ぺんぎんクッキー"}
コントローラーを利用したシンプルなWeb API アプリケーションを作成できました。
参考:ASP.NET Core Web API アプリケーションのテンプレートを利用する方法
ASP.NET Core Web API アプリケーションのテンプレートを利用してプロジェクトを作成する方法もあります。
新しいプロジェクトを作成します。"ASP.NET" で検索し、[ASP.NET Core Web API] のテンプレートを選択します。選択後ダイアログ右下の[次へ]ボタンをクリックします。
[新しいプロジェクトを構成します]の画面が表示されます。プロジェクト名を設定します。設定後[次へ]ボタンをクリックします。
[追加情報]の画面が表示されます。今回はフレームワークを .NET 6.0 に設定します。
またオプションの[コントローラーを使用する (最小限のAPIを使用する場合はオフにします)]のチェックボックスに
チェックがついていることを確認します。設定ができたら、ダイアログ右下の[作成]ボタンをクリックします。
プログラム例: Web API エンドポイントのルーティングを作成する
先の例では
https://(アプリケーションルート)/MyService
のレスポンスを返すコードを実装しました、
コントローラーのクラスにコードを追加して別のURLで別の処理をするWeb APIを実装します。
コード
下記コードを記述します。
using Microsoft.AspNetCore.Mvc;
namespace SimpleControllerWebAPIParam.Controllers
{
[ApiController]
[Route("[controller]")]
public class MyServiceController : ControllerBase
{
private readonly ILogger<MyServiceController> _logger;
public MyServiceController(ILogger<MyServiceController> logger)
{
_logger = logger;
}
public MyItem Get()
{
return new MyItem(148, "ぺんぎんクッキー");
}
[HttpGet("/ms/get")]
public MyItem Action1()
{
return new MyItem(8, "しろくまアイス");
}
}
}
解説
以下のコードを追加しています。
HttpGet
属性を記述することで、GetのAPIのエンドポイントであることを明示します。
"/MyService/get" 部分がURLのパターンになります。
https://(アプリケーションルート)/ms/get
のURLにアクセスした場合に
Action1のメソッドが実行され、レスポンスが返ります。
[HttpGet("/ms/get")]
public MyItem Action1()
{
return new MyItem(8, "しろくまアイス");
}
実行結果
プロジェクトを実行します。Webブラウザが起動しますので、
https://(アプリケーションルート)/ms/get
のURLにアクセスします。
下図の画面が表示されます。Action1メソッドの処理が実行されレスポンスが返されていることが確認できます。
プログラム例: パラメーターを受け取るWeb API エンドポイントの実装
この例ではURLでパラメーターを受け取り、パラメーターの値に応じたのレスポンスを返すコードを実装します。
コントローラーのクラスにコードを追加してパラメータを受け取り処理をするWeb APIを実装します。
コード
using Microsoft.AspNetCore.Mvc;
namespace SimpleControllerWebAPIParam.Controllers
{
[ApiController]
[Route("[controller]")]
public class MyServiceController : ControllerBase
{
private readonly ILogger<MyServiceController> _logger;
public MyServiceController(ILogger<MyServiceController> logger)
{
_logger = logger;
}
public MyItem Get()
{
return new MyItem(148, "ぺんぎんクッキー");
}
[HttpGet("/ms/get/{id}")]
public MyItem Action2(int id)
{
switch (id)
{
case 1:
return new MyItem(101, "らくだキャラメル");
case 2:
return new MyItem(102, "かるがもサブレ");
case 3:
return new MyItem(103, "かびばらチョコサンド");
default:
return new MyItem(-1, "none");
}
}
}
}
解説
以下のコードを追加しています。
HttpGet
属性を記述することで、GetのAPIのエンドポイントであることを明示します。
"/ms/get/{id}" 部分がURLのパターンになります。
https://(アプリケーションルート)/ms/get/(数値)
のURLにアクセスした場合に
Action2のメソッドが実行され、レスポンスが返ります。パラメーターの受け取りはメソッドの引数名をプレースメントの名称と同じにします。
[HttpGet("/ms/get/{id}")]
public MyItem Action2(int id)
{
switch (id)
{
case 1:
return new MyItem(101, "らくだキャラメル");
case 2:
return new MyItem(102, "かるがもサブレ");
case 3:
return new MyItem(103, "かびばらチョコサンド");
default:
return new MyItem(-1, "none");
}
}
実行結果
プロジェクトを実行し、Webブラウザで
https://(アプリケーションルート)/ms/get/2
のURLにアクセスします。下図の画面が表示されます。
Action2メソッドの処理が実行され、パラメータの2に対応するレスポンスが返されます。
プロジェクトを実行し、Webブラウザで
https://(アプリケーションルート)/ms/get/3
のURLにアクセスします。下図の画面が表示されます。
著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用