私は別のプロジェクトでそれを使用するための検証コンポーネントを書くつもりです。私はエンタープライズライブラリVAB、Fluent、CuttingEdge.Conditionsなど多くの他のバリデーションフレームワークにはあまり精通していませんが、自分の目的に適しているかどうかを確認する時間はありません。WCFとWebServiceメソッドのパラメータ値を検証する最良の方法
私は、このコンポーネントが私のために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を使ってAspectを作成し、メソッドの開始位置(OnMethodEntry)にコードを挿入することです。私はPostsharpでロギングをやってきました。
また、MicrosoftはIParameterInspectorをPerform Input Validation in WCFに導入してBeforCallとAfterCallの2つのメソッドを提供していますが、WCFのみで動作すると思います。
アップラップするために、私はこのような私のWCFやWebサービスで検証を実行する必要があります。
[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つのアノテーションに変更するのも良い考えですか?事前に
おかげ
これはまさに私が心に留めていたことであり、私はほとんどコーディングを終了しました。私はこれを助けてくれたMatt Weberの[post](http://badecho.com/2011/11/validating-method-parameters-with-postsharp)を見つけました(最初の部分)。 検証コードを属性に入れることについて、私はインターフェイスメソッド 'GetValidator'を追加したので、各属性は適切なバリデータを返します。 私が直面している問題は、RangeValidatorのような汎用バリデータです。なぜなら、C#は一般的な属性をサポートしていないため、int、double、datetimeなどのあらゆるタイプのコンストラクタをオーバーロードする必要があります... – Ashkan
あなたの答えは私にこのアプローチについて気分を良くしました。 また、FluentValidationでバリデーターを書いています。私はそれがかなり良いと思う。 – Ashkan