public record MyItem
{
public int id;
public string name = "";
}
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のコードを下記のコードに変更します。
var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();
app.MapGet("/", () => "Hello World!");
app.Run();
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レコードを実装します。
namespace SimpleWebAPI
{
public record MyItem
{
public int id { get; set; }
public string name { get; set; } = "";
}
}
MyItemレコードを実装しています。
このレコードに定義されているプロパティ(メンバ変数)がWeb APIのレスポンスのJSONのフィールドになります。
public record MyItem
{
public int id { get; set; }
public string name { get; set; } = "";
}
public record MyItem
{
public int id;
public string name = "";
}
MapGetメソッドを実装しています。アプリケーションルートにアクセスすると、MyItemレコードを作成し、プロパティに値を設定します。
値の設定後、レコードオブジェクトをreturn の戻り値として返します。MyItemレコードの値がJSON形式で返されます。
app.MapGet("/", () =>
{
SimpleWebAPI.MyItem mi = new SimpleWebAPI.MyItem();
mi.id = 120;
mi.name = "ぺんぎんクッキー";
return mi;
});
プロジェクトを実行します。
Webブラウザが起動し、アプリケーションルートのURLのページが表示されます。下図のJSONが表示されます。
{"id":120,"name":"ぺんぎんクッキー"}
MyItemレコードはプライマリ コンストラクターを利用したコードも利用できます。以下のコードでも同じ実行結果となります。
var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();
app.MapGet("/", () =>
{
SimpleWebAPI.MyItem mi = new SimpleWebAPI.MyItem(120, "ぺんぎんクッキー");
return mi;
});
app.Run();
namespace SimpleWebAPI
{
public record MyItem(int id, string name);
}
構造体を利用した場合でも同様の実装ができます。
var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();
app.MapGet("/", () =>
{
SimpleWebAPIUsingStruct.MyItem mi = new SimpleWebAPIUsingStruct.MyItem(120, "ぺんぎんクッキー");
return mi;
});
app.Run();
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;
}
}
}
namespace SimpleWebAPIUsingStruct
{
public struct MyItem
{
public int id;
public string name;
public MyItem(int iid, string sname)
{
id = iid;
name = sname;
}
}
}
クラスを利用した場合でも同様の実装ができます。
クラスの場合もJSONで出力するフィールドをプロパティとして実装する必要があります。
var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();
app.MapGet("/", () =>
{
SimpleWebAPIUsingClass.MyItem mi = new SimpleWebAPIUsingClass.MyItem(120, "ぺんぎんクッキー");
return mi;
});
app.Run();
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アプリケーションを作成します。
下記のコードを記述します。
namespace SimpleWebAPIArrayResponse
{
public record MyItem(int id, string name);
}
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で返されます。
[{"id":120,"name":"ぺんぎんクッキー"},{"id":60,"name":"らくだキャラメル"},{"id":340,"name":"しろくまアイス"}]
パラメーターを受け取るWebAPIを実装する場合はこちらの記事を参照してください。
最上位レベルのステートメントを使用しない場合のコードを紹介します。
動作は先に紹介したプログラムと同じです。
namespace SimpleWebAPI
{
public class Program
{
public record MyItem(int id, string name);
public static void Main(string[] args)
{
var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();
app.MapGet("/", () =>
{
MyItem mi = new MyItem(120, "ぺんぎんクッキー");
return mi;
});
app.Run();
}
}
}
namespace SimpleWebAPIArrayResponse
{
public class Program
{
public record MyItem(int id, string name);
public static void Main(string[] args)
{
var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();
app.MapGet("/", () => {
MyItem mi1 = new MyItem(120, "ぺんぎんクッキー");
MyItem mi2 = new MyItem(60, "らくだキャラメル");
MyItem mi3 = new MyItem(340, "しろくまアイス");
return new MyItem[] { mi1, mi2, mi3 };
});
app.Run();
}
}
}
namespace SimpleWebAPIUsingClassOrStruct
{
public class Program
{
public static void Main(string[] args)
{
var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();
app.MapGet("/", () =>
{
MyItem mi = new MyItem(120, "ぺんぎんクッキー");
return mi;
});
app.Run();
}
}
}
namespace SimpleWebAPIUsingClassOrStruct
{
public class MyItem
{
public int id { get; set; }
public string name { get; set; } = "";
public MyItem(int iid, string sname)
{
id = iid;
name = sname;
}
}
}
namespace SimpleWebAPIUsingClassOrStruct
{
public class Program
{
public static void Main(string[] args)
{
var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();
app.MapGet("/", () =>
{
MyItem mi = new MyItem(120, "ぺんぎんクッキー");
return mi;
});
app.Run();
}
}
}
namespace SimpleWebAPIUsingClassOrStruct
{
public struct MyItem
{
public int id { get; set; }
public string name { get; set; } = "";
public MyItem(int iid, string sname)
{
id = iid;
name = sname;
}
}
}