すべてのモデルに検証ルールで注釈を付けました。
新しいモデルを作成するためにコントローラーストアメソッドを設定しました。
後でアクセスできるようにストリームのコピーを作成した後、リクエスト本文からJSONを解析しています。
私は今、実際にそれらの注釈を実際に使用しようとしています...何もせずに...これ:
if (!json.ContainsKey("name")) {
throw new Exception("Name is not set.");
}
if (!json["name"].GetType().Equals(typeof(String))) {
throw new Exception("Name is not a string");
}
string name = ((string) json["name"]).Trim();
if (name.Length == 0) {
throw new Exception("Name cannot be empty");
}
if (name.Length > 100) {
throw new Exception("Name must be less than 100 characters.");
}
私は、無知な仮定の束を作らないものを見つけることができません。たとえば、これは意味がありません。まだ存在しないオブジェクトのModelStateについて何か気にするのはなぜですか?なぜ、更新エンドポイントのエントリポイントでモデルの状態を気にするのですか?データベースに挿入される前に修正する必要はありませんか?
// POST: Movies/Create
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Create(
[Bind("ID,Title,ReleaseDate,Genre,Price, Rating")] Movie movie)
{
if (ModelState.IsValid)
{
_context.Add(movie);
await _context.SaveChangesAsync();
return RedirectToAction("Index");
}
return View(movie);
}
私はNewtonsoftのJSON.NETスキーマを試してみましたが、非常に多くの厳しい要件と矛盾する要件が(有料でクローズドソースであることに加えて)導入されているため、使用するのは面倒です。それはお勧めしません。
ModelStateDictionary
(これはControllerBase.ModelState
プロパティによって公開されます):
検証情報を含む、HTTPリクエストからアクションメソッドに値をバインドする試みの状態を表します。
したがって、指定した理由のために、「これらの注釈を今すぐ使用する必要はありません...」という理由で、これに注意する必要があります。
フレームワークは、受信リクエストからモデル(つまりMovie movie
コード内)へのデータのバインドを試み、指定した検証アノテーションを分析し、結果をに反映しますModelState
。つまり、エラーがなかった場合- ModelState.IsValid
戻り値true
-それ以外の場合はfalse
対応するエラーで戻りますそれに保存されました。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加