【C#】最小WEB API(Minimal API)にPOSTメソッドを実装する方法

VSCodeで作成したMinimal APIにPOSTメソッドを実装してみます。使用する環境・プロジェクトは下記の記事で作成したものです。


結論
下記の手順で実装します。
- リクエストボディのデータを受け取るモデルを定義する
- program.csにMapPostメソッドを実装する
- リクエスト時の処理を MapPost に実装する
program.csにMappostメソッドを追加して、リクエスト時の処理を実装することで実現できます。順に見ていきましょう。
リクエストボディのデータを受け取るモデルを定義する
まず、POSTリクエストで受け取るデータのモデルを定義します。このモデルは、送信されるJSONデータをC#オブジェクトとして扱うために必要です。
例えば、ユーザー情報を受け取るモデルを以下のように定義します。定義はどのファイルに記載しても構いません。今回は、Model.csというファイルを作成し(名前空間Modelを定義)、その中にUserモデルを定義しました。
namespace Model
{
public class User
{
public string Name { get; set; }
public int Age { get; set; }
}
}
このモデルを次に実装するMapPostの引数に設定することで、JSON等で受け取った各データをプログラム内で使うことができます。
Program.cs に MapPost メソッドを実装する
次に、Program.cs にPOSTメソッドのルートを定義します。MapPost メソッドを使用して、エンドポイントとリクエストのハンドリングを設定します。
Model.csに定義したUserモデルを使用するため、1行目にusingでModelを指定しています。これにより、namespace Model内に定義したモデルを使えるようになります。
using Model;
var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();
app.MapPost("/users", (User user) =>
{
return Results.Ok($"Received user: {user.Name}, Age: {user.Age}");
});
app.Run();
基本構造
MapPostの基本構造は下記のとおりです。
app.MapPost("/endpoint", (parameters) => {
// リクエストの処理
});
- /endpoint:
POSTリクエストの受け付け先となるURLパスを指定します。このURLに対してクライアントがPOSTリクエストを送信します。
例えば、https://~(略)~/endpointにアクセスすると、このpostメソッドの処理が実行されるようにできます。 - (parameters):
POSTリクエストで送信されたデータ(ボディやURLパラメーターなど)を受け取るための引数を指定します。
先ほどの例だと、定義したUserクラスがparametersにあたります。 - => {}:
ラムダ式で、POSTリクエストが来た際に実行される処理を記述します。この部分でリクエストデータの処理、レスポンスの生成などを行います。
レスポンスの生成
MapPost のラムダ式内で、さまざまなレスポンスを生成することができます。Results クラスを使用すると、HTTPレスポンスを簡単に生成できて便利です。Resultクラスを使った返却値の一例は下記のとおりです。
- Results.Ok():
成功レスポンス(200 OK) - Results.Created():
リソースが作成された場合のレスポンス(201 Created) - Results.BadRequest():
リクエストに問題があった場合のレスポンス(400 Bad Request)
app.MapPost("/users", (User user) =>
{
if (user.Age < 0)
{
return Results.BadRequest("Invalid age");
}
return Results.Created($"/users/{user.Name}", user);
});
上記のコードでは、年齢が0歳未満の場合に 400 Bad Request のエラーを返し、正常な場合は 201 Created レスポンスとともにユーザーの情報を返します。
リクエスト時の処理を MapPost に実装する
リクエストに対してどのような処理を実行するかは、ラムダ式内に記載します。
var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();
app.MapPost("/users", (User user) =>
{
return Results.Ok($"Received user: {user.Name}, Age: {user.Age}");
});
app.Run();
上記のコードでは、User オブジェクトを受け取り、内容をレスポンスとして返しています。リクエストボディは自動的にUserクラスにマッピングされ、userとして使うと定義しており、実際に『user.Name』などで各要素にアクセスできるようになります。
実際に処理が期待通りに動くのかを確認したい場合は、例えば、VSCodeのREST Clientなどを使って、以下のようなJSONデータを送信することで、リクエストをテストできます。
POST http://localhost:5000/users
Content-Type: application/json
{
"name": "Alice",
"age": 25
}
このリクエストに対して、サーバーは “Received user: Alice, Age: 25” というレスポンスを返します。なお、REST Clientについては下記の記事で解説しているので、そちらを参照ください。

まとめ
C#で作成する最小APIでpostメソッドを実装するには、下記の手順で可能です。
- リクエストボディのデータを受け取るモデルを定義する
- program.csにMapPostメソッドを実装する
- リクエスト時の処理を MapPost に実装する
以上、参考になれば幸いです。