Web系開発メモ

Java, C#, HTML, CSS, JavaScript のことなどを書いてます。

ASP.NET Core リクエストパラメーターがないエラーの対応方法

ASP.NET Core の APIコントローラーで、リクエストパラメーターが存在しないとエラーになることがありました。

以下に詳細と対応方法を記載していきます。

エラー内容

エラー内容(レスポンス)は以下の通りでした。

{"type":"https://tools.ietf.org/html/rfc7231#section-6.5.1","title":"One or more validation errors occurred.","status":400,"traceId":"00-9c747263ca2a262920e2df3ebc91906d-e175a3e191afb22b-00","errors":{"name":["The name field is required."]}}

name が必須入力になっているようです。

ソース

APIコントローラーのコード例は以下の通りです。

using Microsoft.AspNetCore.Mvc;

[ApiController]
public class NameController : ControllerBase {
    [HttpGet]
    [Route("api/name")]
    public Dictionary<string, string> Get(string name) {
        return new Dictionary<string, string>() {
            {"name", name}
        };
    }
}

メソッドの引数 name にリクエストパラメータが設定されます。

エラーが発生するリクエス

引数に設定されるパラメーターが存在しない、

http://localhost:5113/api/name

もしくは値が空のリクエストでエラーが発生しました。

http://localhost:5113/api/name?name=

※ ポート番号は自分の開発環境のものです。

対応方法

引数の stringstring? にするとエラーが発生しなくなりました。

using Microsoft.AspNetCore.Mvc;

[ApiController]
public class NameController : ControllerBase {
    [HttpGet]
    [Route("api/name")]
    public Dictionary<string, string> Get(string? name) {
        return new Dictionary<string, string>() {
            {"name", name}
        };
    }
}

? を付けると、null を許容してくれるようです。対応後に name を指定しないと、以下の JSON が返却されました。

{"name":null}

リクエストパラメーターが存在しない可能性がある場合は、この対応方法で良いのかなと思いました。