49

必須属性を持つ Model オブジェクトがあります

public class ApiPing
{
    [Required]
    public DateTime ClientTime { get; set; }

    public DateTime ServerTime { get; set; }
}

モデルの状態をチェックする Controller メソッドがあります。

public IHttpActionResult Ping(ApiPing model)
{    
    if (!ModelState.IsValid)
        return BadRequest(ModelState);

    model.ServerTime = DateTime.UtcNow;

    return Ok(model);
}

適切なリクエスト (モデルを使用) をアクション メソッドに送信すると、ModeState.IsValid (true) から正しい値が取得されます。ただし、無効なリクエストを送信すると (モデルがないため、モデルは null です)、誤った ModelState.IsValid (これも true) が返されます。

コードでモデルが null かどうかを簡単に確認できますが、それは臭いです。これは意図された「機能」ですか、それとも ModelState 検証のバグですか? 私は何か間違っていますか?期待しすぎですか?

4

4 に答える 4

24

私は以前に同じ問題を抱えていましたが、答えはすでにいくつかのフォーラムで入手可能であり、SO: ModelState.IsValid でもそうであってはならない場合でもここにありますか?

カスタム フィルターを追加して、欠落しているフィールドや null 値を検証 (無効化) することもできます http://www.asp.net/web-api/overview/formats-and-model-binding/model-validation-in-aspnet -web-api

http://www.strathweb.com/2012/10/clean-up-your-web-api-controllers-with-model-validation-and-null-check-filters/

于 2013-12-02T06:20:46.610 に答える
4
  1. モデルを構造体として宣言する
  2. 必要なすべてのプロパティの型を null 許容に変更します
于 2015-11-07T06:40:24.843 に答える