Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
コンソールでもモデル検証したい
Search
tomokusaba
June 01, 2023
Programming
390
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
コンソールでもモデル検証したい
コンソールでもモデル検証したい
.NET の 3 日間 (2 日目) ~3 コミュニティ合同イベント~
tomokusaba
June 01, 2023
More Decks by tomokusaba
See All by tomokusaba
Azure Copilot Resiliency Agentをいろいろ試してみる
tomokusaba
0
72
30代後半からでも遅くないキャリア形成
tomokusaba
0
300
GitHub Copilotで書いたコード、レビューはどうしてる?
tomokusaba
0
58
Azure CAFで考えるAIエージェント導入の進め方
tomokusaba
1
120
GitHub Copilot app時代の開発フロー
tomokusaba
0
83
オートマトンと字句解析でRoslynを読む
tomokusaba
0
170
GitHub Copilot appとGitHub Copilot CLIとVS CodeのCopilot Chat Agent Modeの使い分け
tomokusaba
0
220
GitHub Copilot app最速の発信の裏側
tomokusaba
1
600
自宅サーバの変遷
tomokusaba
0
940
Other Decks in Programming
See All in Programming
AWS Step Functions 大規模並列の壁を越える / jaws-sonic-2026-niigata-step-functions
kasacchiful
PRO
1
530
MVNOの申込からeSIM開通までをiOSアプリでつなぐ- 本人確認・MNP・通信事業者基盤をまたぐ実装
satotakeshi
0
470
Webの地図
yosuke_furukawa
PRO
6
4.8k
速く作れる。その次は、速く確かめられる開発へ 〜AIネイティブ開発を支える、Shift Down〜 / Can build fast. Next, moving to development where we can verify fast.
rkaga
6
4.6k
AI Agent時代のリアーキテクチャ戦略と実践
hokaccha
9
5k
App Storeの外へ──日本のiOSサイドローディング入門 for iOSDC Japan 2026
yuukiw00w
0
250
そのリトライ、死んだコネクションを使い回していませんか ── GoのHTTPクライアントとHTTP/2を実プロダクト障害から学び直す
myus4a
0
260
市販E-Readerを乗っ取れ 〜Embedded Swiftで電子ペーパーガジェットを制御する〜
trickart
0
210
Augmenting AI with the Power of Jakarta EE
ivargrimstad
0
350
Java 27新機能 / Java 27 new features
kishida
2
170
Augmenting AI with the Power of Jakarta EE
ivargrimstad
0
280
AGENTS.md Is Not Enough:Build Skills, Don't Download Them
lx_t
0
130
Featured
See All Featured
Money Talks: Using Revenue to Get Sh*t Done
nikkihalliwell
0
500
Tell your own story through comics
letsgokoyo
1
1.1k
For a Future-Friendly Web
brad_frost
183
10k
The Illustrated Guide to Node.js - THAT Conference 2024
reverentgeek
1
540
[RailsConf 2023] Rails as a piece of cake
palkan
59
7k
Context Engineering - Making Every Token Count
addyosmani
9
1.2k
A Tale of Four Properties
chriscoyier
163
24k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
38
3k
16th Malabo Montpellier Forum Presentation
akademiya2063
PRO
0
390
Agile Leadership in an Agile Organization
kimpetersen
PRO
0
240
Into the Great Unknown - MozCon
thekraken
41
2.7k
Making the Leap to Tech Lead
cromwellryan
135
10k
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 のフォームと入力コンポーネント
おしまい おしまい