---
title: "EntityServiceの検証"
slug: "entityservice-validation"
abstract: "カスタムビジネスルールを強制し、サーバーを潜在的に安全でない入力から保護するために用いられる検証機能を記述します。"
---
# EntityServiceの検証

EntityServiceは、カスタムビジネスルールを強制し、サーバーを潜在的に安全でない入力から守るために使用する検証機能を提供します。

EntityServiceが用いる検証機構は、[System.ComponentModel.DataAnnotations](http://msdn.microsoft.com/en-us/library/system.componentmodel.dataannotations.aspx)名前空間で定義された型を使用します。ビジネスオブジェクトを[POCOクラス](http://en.wikipedia.org/wiki/Plain_Old_CLR_Object)として定義し、オプションでパブリックプロパティに属性を適用してデータ型のカスタム検証要件を定義します。

検証はクライアントがサーバーにデータを送信する前に行われ、サーバーがデータを受け取った時もサーバー上で行われます。サーバーは、指定されたビジネスオブジェクトに定義されたバリデータについてクライアントJavaScriptライブラリに通知するためにHTTP OPTIONSリクエストに応じてメタデータを出力します。

## 基本的なバリデータ

Sitecore.Services.Client以下のバリデータを提供します:

-   [必須](http://msdn.microsoft.com/en-us/library/system.componentmodel.dataannotations.requiredattribute.aspx)
-   [ストリングレングス](http://msdn.microsoft.com/en-us/library/system.componentmodel.dataannotations.stringlengthattribute.aspx)
-   [正則表現](http://msdn.microsoft.com/en-us/library/system.componentmodel.dataannotations.regularexpressionattribute.aspx)

以下のコードスニペットは、ビジネスオブジェクトの公開プロパティに属性を適用してデータ検証をサポートする方法を示しています。

public class SimpleEntity : EntityIdentity
{
 Required
 StringLength(10, ErrorMessage = "Names should be between 1 and 10 characters")
 public string Name { get; set; }
}

## 検証を拡張する

検証メカニズムを拡張でき、新しいバリデーターを定義してビジネスオブジェクトタイプに適用できます。

Sitecore.Services.Clientの基本的なバリデータセットに加え、contribプロジェクトも存在します。このプロジェクトにはメールアドレスのチェックをサポートするバリデーター拡張の例が含まれています。このプロジェクトは[https://github.com/Sitecore-Community/Sitecoreで見つけることができます。Services.Contrib](https://github.com/Sitecore-Community/Sitecore.Services.Contrib).

### 新しい検証者タイプを定義します

新しいバリデーターは、型のサーバー側実装とクライアント側検証スクリプトを提供することで定義できます。

#### サーバー側の実装

-   System.ComponentModel.DataAnnotations.ValidationAttributeから派生するクラスを作成してバリデーターを定義し、カスタム検証ロジックを実装します。
    
    MSDNの記事 [「How to: Customize Data Field Validation in the Data Model: Using Custom Attributes](http://msdn.microsoft.com/en-us/library/cc668224.aspx) 」には有用な情報が含まれています。
    
-   Sitecore.Services.Core.MetaData.ValidationMetaDataBase<T>から派生するクラスを作成し、<T>がバリデータ型であるメタデータエミッターを定義します。OPTIONSリクエストに応答して発行されるメタデータをカスタマイズするために、仮想メソッドDescribe(ValidationAttribute attribute, string filedName)をオーバーライドできます。
    
    例えば:
    
    public class RegularExpressionMetaData : ValidationMetaDataBase<RegularExpressionAttribute>
    {
     public RegularExpressionMetaData()
     : base("regex")
     {
     }
     public override Dictionary<string, object> Describe(ValidationAttribute attribute, string fieldName)
     {
     var metadata = base.Describe(attribute, fieldName);
     var regularExpressionAttribute = (RegularExpressionAttribute)attribute;
     metadata.Add("param", regularExpressionAttribute.Pattern);
     return metadata;
     }
    }
    

Sitecore.Services.ClientデフォルトでIValidationMetaDataProviderのAssemblyScannerValidationMetaDataProvider実装を使用しています。アプリケーション起動時に、このクラスはウェブサイトのbinフォルダ内のアセンブリをスキャンし、検証メタデータを提供するタイプを探します。

ビジネスオブジェクトに検証属性を指定していて、検証のためのメタデータを提供する対応するタイプが見つからない場合、属性が遭遇した際にEntityServiceが属性を無視した際にSitecoreログに警告が書き込まれます。

#### クライアント実装

EntityServiceとやり取りするJavaScriptライブラリは、クライアント側の検証が機能するためにサイト内のすべてのバリデーターをどう扱うかを知っている必要があります。カスタムバリデータを追加する際は、検証ロジックのクライアント側実装を必ず提供する必要があります。

クライアント側の検証ロジックは、Sitecoreで指定されたフォルダ内のJavaScriptファイルに置きます。拡張子.Validation.FolderPath設定設定。デフォルト設定は \\sitecore\\shell\\client\\Services\\Assets\\lib\\extensions\\validators.

EntityService JavaScriptライブラリがサービスメタデータ応答でカスタムバリデータと初めて出会うと、その検証属性のクライアント側ロジックを含むJavaScriptファイルを取得するためにMetaDataScriptコントローラ(sitecore/api/ssc/script/metadata)に呼び出しを行います。