Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
コンソールでもモデル検証したい
Search
tomokusaba
June 01, 2023
Programming
0
200
コンソールでもモデル検証したい
コンソールでもモデル検証したい
.NET の 3 日間 (2 日目) ~3 コミュニティ合同イベント~
tomokusaba
June 01, 2023
Tweet
Share
More Decks by tomokusaba
See All by tomokusaba
Semantic Kernelの最新状況及び入門
tomokusaba
0
8
Fluent UI Blazor 最新Update
tomokusaba
1
200
アクセシビリティの観点からみたFluent UI Blazorのすすめ
tomokusaba
1
270
Webアプリをできるだけコードを手書きしないで作ってみる
tomokusaba
2
280
Azure OpenAI Serviceのプロンプトエンジニアリング入門
tomokusaba
3
1.2k
プロンプトエンジニアリング入門
tomokusaba
2
1.5k
Sementic Kernelのネイティブ関数について
tomokusaba
0
1k
C#でのPlaywrightを使ったE2Eテストの実際
tomokusaba
0
680
「インフラ初心者」…からのPlaywright Testing
tomokusaba
1
370
Other Decks in Programming
See All in Programming
AWS CDKにおける「再利用性」を考える / aws-cdk-reusability
gotok365
6
1.3k
君たちはどうコードをレビューする (される) か / 大吉祥寺.pm
utgwkk
15
8.5k
CSC307 Lecture 05
javiergs
PRO
0
210
CSC307 Lecture 08
javiergs
PRO
0
330
Introduction to GitOps
hwchiu
0
110
Microservices rules (July 2024) : what good looks like
cer
PRO
0
1.6k
ぼっちを避けて楽しむためのアノテコノテ / Various Tips and Tricks to Avoid Loneliness and Have Fun
nrslib
3
1.7k
Modern Angular: Renovation for Your Applications
manfredsteyer
PRO
0
140
3 Effective Rules for Success with Signals in Angular
manfredsteyer
PRO
0
120
生成AIをkintoneに連携してみた
hideg
0
230
Composing an API the *right* way (Droidcon Berlin 2024)
zsmb
1
450
英語
s_shimotori
1
220
Featured
See All Featured
ParisWeb 2013: Learning to Love: Crash Course in Emotional UX Design
dotmariusz
105
6.8k
The Straight Up "How To Draw Better" Workshop
denniskardys
229
130k
GraphQLとの向き合い方2022年版
quramy
36
13k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
360
22k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
224
21k
A Philosophy of Restraint
colly
200
16k
Agile that works and the tools we love
rasmusluckow
325
20k
Principles of Awesome APIs and How to Build Them.
keavy
124
16k
[RailsConf 2023] Rails as a piece of cake
palkan
35
4.4k
VelocityConf: Rendering Performance Case Studies
addyosmani
321
23k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
90
47k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
662
120k
Transcript
コンソールでもモデル検証 したい 株式会社SAKURUG エンジニアリングユニット 草場 友光 .NET の 3 日間
(2 日目) ~3 コミュニティ合同イベント~
自己紹介 • 普段は主にシステムをAzureにモダナ イズする仕事をしています。 • コミュニティ活動を通じて知識をアッ プデートしています。 • 2022/08-2023 Microsoft
MVP (Developer Technologies) • tomo_kusaba
宣伝 【VISION】ひとの可能性を開花させる企業であり続ける VISIONに共感できる仲間募集中。
注意 • 個人の見解・解釈が多分に入っています。 • 見解の相違・事実誤認などありましたらご指摘ください。
今日の目的 • ASP.NET Coreでは組み込みの入力コンポーネント及びモデル に検証属性をつけることで基本的な入力値検証が行えます。 • この検証属性をつけたモデルを利用しコンソールアプリケー ションでもモデル検証を行う方法について紹介します。
Webにおける入力値検証の基本 • 一般的に入力値検証(バリデーション)はクライアント側、 サーバ側双方で行われることが一般的。 • クライアント側で入力値検証が行われることでユーザ利便性を 提供する。 • サーバ側で入力値検証が行われることでセキュリティを担保す る。
Blazor WebAssembly(クライアント側) • 入力値検証のためのフォーム(EditForm)が用意されている • DataAnnotationsValidatorによって検証属性に基づいて検証 を行うことができる。
組み込みの入力コンポーネント 入力コンポーネント 説明 InputCheckbox チェックボックス InputDate 日付入力 InputFile ファイルアップロード InputNumber
数値入力 InputRadio ラジオボタン InputSelect ドロップダウンリスト InputText テキストボックス InputTextArea テキストエリア
ASP.NET Core WebAPI • ApiController属性によりモデル検証エラーが発生すると HTTP400応答が自動的にトリガーされる。 • 必要な検証属性はクライアント側と共通 • 組み込みのデータ検証とカスタム検証ロジックの両方が検証さ
れる。
代表的な組み込みの検証属性 属性 説明 Required 入力がされているかどうかを検証します。 Range 入力が指定した範囲内であるかどうかを検証します。 StringLength 入力文字列が指定した長さを超えてないかどうかを検証しま す。
RegularExpression 入力が指定した正規表現と一致することを検証します。
モデル例
クライアント側検証エラー例 必須入力の名前を空欄とし た
サーバ側検証エラー例 名前を空欄とした
コンソールにおけるモデル検証 • System.ComponentModel.DataAnnotations. Validator.TryValidateObject()メソッドを使用する • 第一引数:モデル • 第二引数:ValidationContext • 第三引数:ValidationResultのList
• 第四引数:すべてのプロパティをチェックするかどうか
コンソールにおけるモデル検証コード例 • modelはモデル検証対象のオブジェクト List<ValidationResult> errors = new(); bool isValid =
Validator.TryValidateObject(model, new ValidationContext(model), errors, true); if (isValid) { Console.WriteLine("Valid"); } else { Console.WriteLine("Invalid"); foreach (var error in errors) { Console.WriteLine(error.ErrorMessage); } }
デモ • モデル検証属性を確認 • モデル検証が成功するパターンについて確認 • モデル検証が失敗するパターンについて確認 • 必須属性 •
文字列長 • Email • エラーメッセージの表示の確認
まとめ • コンソールでもモデル検証は可能。 • コンソールでできるということはあらゆるアプリケーションモ デル・任意の場所でモデル検証が可能である。 • 例えば、Blazor WebAssemblyでは既定ではForm送信時のモ デル検証となっているがこの手法を使えばあらゆるタイミング
での検証が可能(必要かどうかはさておき) • WebAPIではPOST/PUT時にモデル検証し失敗時に400応答す るのが既定動作であるが、これも任意タイミングで検証可能。 例えば、JSONファイルアップロード→オブジェクト化→モデ ル検証するなど
デモコード • https://github.com/tomokusaba/Valid ateTest
.NET8 Preview2で追加 • .NET8 Preview2で組み込みのデータ検証に拡張属性がいくつ か追加されました。 属性 説明 Required(DisallowAllDefalutValues) 構造体がデフォルト値と等しくないことを検証
DateOnlyなら0001/01/01 Range(MinimumIsExclusive,MaximumIsE xclusive) 範囲の検証で境界値を拒否できるようになった (0,10)としたときは0と10はダメのように設定可能 ex) Length(10, 20) 文字列またはコレクションの長さの下限と上限を設定できるようになりました。 AllowedValues プロパティを検証するための許可リストを指定できる DeniedValues プロパティを検証するための拒否リストを指定できる
デモコード • https://github.com/tomokusaba/DataAnnotationsTestDo tnet8pre2
参考文献 • ASP.NET Core Blazor のフォームと入力コンポーネント
おしまい おしまい