さまざまなプロジェクトで使用する検証コンポーネントを作成します。Enterprise Library VAB、Fluent、CuttingEdge.Conditionsなどの検証フレームワークにはあまり詳しくありませんが、それらすべてを使用して自分の目的に適したものを確認する時間はありません。
このコンポーネントに 2 つの異なる機能を提供してもらいたい:
まず、EmailValidator、StringLengthValidator、MyCustomValidator などのバリデーターを用意して、以下のようにコード内でいつでも使用できるようにします。
public class EmailValidator : RegexValidator // or StringValidator or whatever!
{
public EmailValidator() : base("emailRegexHere")
{
}
public bool override DoValidate(string value)
{
return base.DoValidate(value);
}
}
...
public void MyMethod(string email)
{
EmailValidator validator = new EmailValidator();
if(!validator.Validate(email))
throw new NotValidatedException("email is invalid.");
...
}
次に、必要なメソッド パラメーターに DataAnnotations のようなものを追加のコーディングなしで適用して、パラメーターを検証する必要があります。私が知っている 1 つの可能な方法は、PostSharpを使用してアスペクトを記述し、メソッドの開始位置 (OnMethodEntry) にコードを挿入することです。Postsharp でログを記録しましたが、うまく機能します。
また、Microsoft は、BeforCall と AfterCall の 2 つのメソッドを提供するWCF で入力検証を実行する IParameterInspector を導入していますが、WCFでしか機能しないと思います。
まとめると、次のように WCF または WebService で検証を行う必要があります。
[System.Web.Script.Services.ScriptService]
public class MyServiceClass : System.Web.Services.WebService
{
[Aspects.Validate]
[WebMethod(EnableSession = true)]
public string SubmitComment([Validation.Required]string content,[Validation.Guid] string userId,[Validation.Required] [Validation.Name]string name, [Validation.Email]string email, string ipAddress)
{
...
}
}
注:これは、私が必要とする動作を示すための単なるサンプル コードです。他の提案は大歓迎です。また、Validation.* アノテーションを ValidateParam(typeof(EmailValidator)) のような 1 つのアノテーションに変更することをお勧めしますか?
前もって感謝します