C#でバリデーションのメッセージ変更(カスタマイズ)
C#のAzureFunctionでバリデーションメッセージを英語から日本語にしてみました。
前回書いたコードを元に修正しています。記事の下の方にサンプルとしてリンクしています。
リクエストオブジェクトに直接書く(ErrorMessageプロパティを使う)
リソースファイルなど、他のファイルからメッセージを取らずに直接記述する場合は、
リクエストのプロパティに下記のように記載します。
[Required(ErrorMessage = "名前は必須です。")]
public string Name { get; set; }
RequiredAttributeのErrorMessageプロパティに値を取得すると、
必須バリデーションのメッセージが記載した内容になります。
ちなみにErrorMessageプロパティはRegularExpression, Range, MaxLengthなど
それぞれの属性に用意されているので、他でも同じように使えます。
リソースファイルからメッセージを取得して使う(推奨)
リソースファイルから取ってきたメッセージを使った方が綺麗にまとまって、良さそうです。
リソースファイルを用意する。
表示するメッセージを記載したリソースファイルを用意します。
「{0}」を指定している箇所が動的に変わってくれます。
Messages.resx という名前で作りました。
<root>
・・・省略・・・・
<data name="Require">
<value>{0}は必須です。</value>
</data>
</root>
リソースファイルからメッセージを取得して表示
メッセージファイルを作ったあとは、下記のように書いていきます。
[Display(Name = "名前")]
[Required(ErrorMessageResourceName = "Require", ErrorMessageResourceType = typeof(Resource.Messages))]
[JsonProperty(PropertyName = "name")]
public string Name { get; set; }
DisplayAttributeに「{0}」に当てはまる名前を記載します。
ErrorMessageResourceNameにメッセージファイルのnameを書いて、ErrorMessageResourceTypeにファイルの型をtypeofで設定します。
これで動作確認すると、
名前は必須です。
といった形で、{0}のところが埋められて表示されます。
コメント