就職・転職書類の作成でお困りの方へ
Tips
PR

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

かなむ
記事内に商品プロモーションを含む場合があります

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

環境作成はこちら
【C#】VSCodeでC#のアプリを開発する手順
【C#】VSCodeでC#のアプリを開発する手順
プロジェクト作成はこちら
【C#】VSCodeでC#の最小WEB API(Minimal API)を作成する方法と仕組み
【C#】VSCodeでC#の最小WEB API(Minimal API)を作成する方法と仕組み

結論

下記の手順で実装します。

  1. リクエストボディのデータを受け取るモデルを定義する
  2. program.csにMapPostメソッドを実装する
  3. リクエスト時の処理を 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については下記の記事で解説しているので、そちらを参照ください。

【REST Client】VSCodeでHTTPリクエストをテストする方法(無料)
【REST Client】VSCodeでHTTPリクエストをテストする方法(無料)

まとめ

C#で作成する最小APIでpostメソッドを実装するには、下記の手順で可能です。

  1. リクエストボディのデータを受け取るモデルを定義する
  2. program.csにMapPostメソッドを実装する
  3. リクエスト時の処理を MapPost に実装する

以上、参考になれば幸いです。

ABOUT ME
かなむ
かなむ
現役SE。javaとc#とpythonとvbの経験あり。アプリ開発メイン。インフラ、特にネットワークは苦手。2児の父。好きな寿司ネタは「鯛」。将来は離島に別荘を構えたい。

記事URLをコピーしました