LoginSignup
8
5

More than 5 years have passed since last update.

「ASP.NET Web API でモデルの検証」を試してみる

Last updated at Posted at 2018-11-26

背景

ASP.NET Web APIで「モデルの検証処理」の実装が必要だったので、試した際の備忘録

今回試した内容

  • 必須の値の検証(Required)
  • 最大文字数の検証(MaxLength)
  • 数値の最小範囲~最大範囲の検証(Range)

開発環境

  • Windows 10
  • Visual Studio 2017
  • .NET Framework 4.7.2

参考にした資料

実装

ASP.NET Web API でモデルの検証に沿って、ModelとControllerを作成。

User.cs
//Using System.ModelComponentModel.DataAnotaions が必要。
public class User
 {
    [MaxLength(4)]
    [Required]
    public string UserID { get; set; }
    public string UserName { get; set; }
    [Range(0, 999)]
    public int Age { get; set; }
    public DateTime BirthDay { get; set; }
    public bool IsActive { get; set; }
}
UsersController.cs
public class UsersController : ApiController
{
    public HttpResponseMessage Post(User user)
    {
        if (ModelState.IsValid)
        {
            return new HttpResponseMessage(HttpStatusCode.OK);
        }
        else
        {
            return Request.CreateErrorResponse(HttpStatusCode.BadRequest, ModelState);
        }
    }
}

実行結果

1. UserIDの文字数制限を超過した場合

RequestBody.json
{
    "userid":"user1"
}
ResponseBody.json
{
    "Message":"The request is invalid.",
    "ModelState":{
        "user.UserID":[
            "フィールド UserID は、最大の長さが '4' の文字列型または配列型でなければなりません。"
        ]
    }
}

2. UserIDを指定しなかった場合

RequestBody.json
{
    "age":27
}
ResponseBody.json
{
    "Message":"The request is invalid.",
    "ModelState":{
        "user.UserID":[
            "UserID フィールドが必要です。"
        ]
    }
}

3. Ageの範囲外の値を指定した場合

RequestBody.json
{
    "userid":"user",
    "age":1000
}
ResponseBody.json
{
    "Message":"The request is invalid.",
    "ModelState":{
        "user.Age":[
            "フィールド Age は 0 から 999 までの範囲で指定してください。"
        ]
    }
}

4. 「UserIDの文字数超過」 かつ 「Ageの範囲外の値」を指定した場合

RequestBody.json
{
    "userid":"user1",
    "age":1000
}
ResponseBody.json
{
    "Message":"The request is invalid.",
    "ModelState":{
        "user.UserID":[
            "フィールド UserID は、最大の長さが '4' の文字列型または配列型でなければなりません。"
        ],
        "user.Age":[
            "フィールド Age は 0 から 999 までの範囲で指定してください。"
        ]
    }
}

今後試したい内容

  • プロパティの型の検証
  • エラーメッセージのカスタマイズ
  • RFC7807に準拠したエラーレスポンス形式でエラーを返す
8
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
5