シンプルな ASP.NET Core Web API アプリケーションを作成する - C#

ASP.NET Core Web API アプリケーションでシンプルなWeb APIアプリケーションを作成する手順を紹介します。

概要

ASP.NET CoreでWeb APIを作成する方法として、ASP.NET Core Web APIアプリケーションを利用する方法があります。 この記事では、ASP.NET Core Web APIアプリケーションのコードと作成手順を紹介します。

プログラム例

プロジェクトの作成

Visual Studioを起動しメインウィンドウを表示します。[ファイル]メニューの[新規作成]サブメニューの[プロジェクト]の項目をクリックします。


[新しいプロジェクトの作成]ダイアログが表示されます。


ダイアログの検索ボックスで "API" で検索します。検索結果に[ASP.NET Core Web API]のプロジェクトテンプレートが表示されますので、 こちらを選択してプロジェクトを作成します。


今回は、シンプルなAPIアプリケーションを作成するため、[ASP.NET Core (空)]のプロジェクトテンプレートを選択します。


プロジェクト名や配置場所を設定します。


フレームワークは ".NET 6.0" を選択します。[作成]ボタンをクリックしてプロジェクトを作成します。


ASP.NET Core アプリケーションのシンプルなひな形が作成できます。


作成されたプロジェクトを実行します。Webブラウザが起動し、アプリケーションルートのURLのページが表示されます。"Hello World!" のテキストが表示されます。
この状態でも "Hello World!" のテキストを返すWeb APIアプリケーションです。


今回は、WebAPIでは一般的なJSONの値を返す実装を追加します。

コード

Program.csのコードを下記のコードに変更します。
Program.cs 変更前
var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();

app.MapGet("/", () => "Hello World!");

app.Run();

Program.cs 変更後
var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();

app.MapGet("/", () =>
{
  SimpleWebAPI.MyItem mi = new SimpleWebAPI.MyItem();
  mi.id = 120;
  mi.name = "ぺんぎんクッキー";
  return mi;
});

app.Run();

MyItem.csファイルを作成し、MyItemレコードを実装します。
MyItem.cs
namespace SimpleWebAPI
{
  public record MyItem
  {
    public int id { get; set; }
    public string name { get; set; } = "";
  }
}

解説

MyItem.cs

MyItemレコードを実装しています。
このレコードに定義されているプロパティ(メンバ変数)がWeb APIのレスポンスのJSONのフィールドになります。
MyItem.cs
  public record MyItem
  {
    public int id { get; set; }
    public string name { get; set; } = "";
  }
注意
recordのメンバはプロパティとして実装する必要があります。メンバ変数として実装する下記のコードでは動作しません。
  public record MyItem
  {
    public int id;
    public string name = "";
  }

Program.cs

MapGetメソッドを実装しています。アプリケーションルートにアクセスすると、MyItemレコードを作成し、プロパティに値を設定します。 値の設定後、レコードオブジェクトをreturn の戻り値として返します。MyItemレコードの値がJSON形式で返されます。
app.MapGet("/", () =>
{
  SimpleWebAPI.MyItem mi = new SimpleWebAPI.MyItem();
  mi.id = 120;
  mi.name = "ぺんぎんクッキー";
  return mi;
});

実行結果

プロジェクトを実行します。
Webブラウザが起動し、アプリケーションルートのURLのページが表示されます。下図のJSONが表示されます。


レスポンスJSON
{"id":120,"name":"ぺんぎんクッキー"}

プライマリ コンストラクターを利用した実装

MyItemレコードはプライマリ コンストラクターを利用したコードも利用できます。以下のコードでも同じ実行結果となります。
Program.cs
var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();

app.MapGet("/", () =>
{
  SimpleWebAPI.MyItem mi = new SimpleWebAPI.MyItem(120, "ぺんぎんクッキー");
  return mi;
});

app.Run();

MyItem.cs
namespace SimpleWebAPI
{
  public record MyItem(int id, string name);
}

構造体(struct)を利用した実装

構造体を利用した場合でも同様の実装ができます。
Program.cs
var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();

app.MapGet("/", () =>
{
  SimpleWebAPIUsingStruct.MyItem mi = new SimpleWebAPIUsingStruct.MyItem(120, "ぺんぎんクッキー");
  return mi;
});
app.Run();
MyItem.cs
namespace SimpleWebAPIUsingStruct
{
  public struct MyItem
  {
    public int id { get; set; }
    public string name { get; set; } = "";

    public MyItem(int iid, string sname)
    {
      id = iid;
      name = sname;
    }
  }
}
補足
structで実装する場合はメンバはプロパティとして実装する必要があります。
以下のコードでは動作しません。
namespace SimpleWebAPIUsingStruct
{
  public struct MyItem
  {
    public int id;
    public string name;

    public MyItem(int iid, string sname)
    {
      id = iid;
      name = sname;
    }
  }
}

クラス(class)を利用した実装

クラスを利用した場合でも同様の実装ができます。
クラスの場合もJSONで出力するフィールドをプロパティとして実装する必要があります。
Program.cs
var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();

app.MapGet("/", () =>
{
  SimpleWebAPIUsingClass.MyItem mi = new SimpleWebAPIUsingClass.MyItem(120, "ぺんぎんクッキー");
  return mi;
});

app.Run();
MyItem.cs
namespace SimpleWebAPIUsingClass
{
  public class MyItem
  {
    public int id { get; set; }
    public string name { get; set; } = "";

    public MyItem(int iid, string sname)
    {
      id = iid;
      name = sname;
    }
  } 
}

プログラム例:オブジェクトの配列を返す場合

オブジェクトの配列を返す場合には、レコードオブジェクトの配列をMapGetメソッドの返り値に設定します。

プロジェクトの作成

先の例と同様に、空のASP.NET Core Webアプリケーションを作成します。

コード

下記のコードを記述します。
MyItem.cs
namespace SimpleWebAPIArrayResponse
{
  public record MyItem(int id, string name);
}

Program.cs
var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();

app.MapGet("/", () => {
  SimpleWebAPIArrayResponse.MyItem mi1 = new SimpleWebAPIArrayResponse.MyItem(120, "ぺんぎんクッキー");
  SimpleWebAPIArrayResponse.MyItem mi2 = new SimpleWebAPIArrayResponse.MyItem(60, "らくだキャラメル");
  SimpleWebAPIArrayResponse.MyItem mi3 = new SimpleWebAPIArrayResponse.MyItem(340, "しろくまアイス");
  return new SimpleWebAPIArrayResponse.MyItem[]{ mi1,mi2,mi3};
});

app.Run();

解説

MyItem.cs は先のデモと同じコードです。

Program.cs ファイルの MapGetメソッドでは3つのMyItemレコードを作成し、MyItemの配列を戻り値として返します。
app.MapGet("/", () => {
  SimpleWebAPIArrayResponse.MyItem mi1 = new SimpleWebAPIArrayResponse.MyItem(120, "ぺんぎんクッキー");
  SimpleWebAPIArrayResponse.MyItem mi2 = new SimpleWebAPIArrayResponse.MyItem(60, "らくだキャラメル");
  SimpleWebAPIArrayResponse.MyItem mi3 = new SimpleWebAPIArrayResponse.MyItem(340, "しろくまアイス");
  return new SimpleWebAPIArrayResponse.MyItem[]{ mi1,mi2,mi3};
});

実行結果

プロジェクトを実行しアプリケーションルートURLにアクセスします。下図のページが表示されます。


レスポンスのJSONは以下の内容です。MyItemオブジェクトの内容が配列形式のJSONで返されます。
レスポンスJSON
[{"id":120,"name":"ぺんぎんクッキー"},{"id":60,"name":"らくだキャラメル"},{"id":340,"name":"しろくまアイス"}]
著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用
最終更新日: 2022-04-25
作成日: 2022-04-07
iPentec all rights reserverd.