[C#]バリデーションのメッセージ変更(カスタマイズ)

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}のところが埋められて表示されます。

サンプル

コメント

タイトルとURLをコピーしました