ASP.NET CoreでWeb APIを作ってみる -検索用Web APIの追加

はじめに

今回は、前回追加したWeb APIに検索の機能をつけてみます。

実装

Controller/Users/UsersController.csに以下のメソッドを追加してください。

[HttpGet]
public async Task<ActionResult<User>> GetUserByName([FromQuery(Name = "name")] string name)
{
    var user = await _context.User.SingleAsync(u => u.name == name);

    if (user == null)
    {
        return NotFound();
    }
    return user;
}

クエリパラメータをFromQueryで指定しているのがポイントです。
そして、GetUser()メソッド(引数を取らない方)をコメントアウトするなり削除するなりしてください。
これを消しておかないと、条件にマッチするAPIのエンドポイントが複数できることになり、うまくルーティングが行われずに以下のエラーが返されます。

AmbiguousMatchException: The request matched multiple endpoints.

動作確認

ブラウザでhttps://localhost:5001/api/Users?name=usernameにアクセスすると、nameがusernameのデータのみが返されます。

おわりに

SQL文を書くことなく、検索の機能を実装できました。しかし、エラーハンドリングなどの処理が貧弱なため、このままでは使用できません。
次回はこのWeb APIを改良していこうと思います。