4
私はバリデータを持っていますが、私は検証ロジックの一部としていくつかのセッション変数を使用しようとしていますが、base.Requestは常にNULLに戻ります。私はラムダ関数に指示に従って追加しました。また、Fluent validation for request dtosセクションのヒントにIRequiresHttpRequest
を使用すると言われていますが、AbstractValidatorクラスは既にIRequiresRequest
を実装しているため、バリデーションのドキュメントは古くなっているようです。ServiceStack Validator - 要求が挿入されていません
これは私のコードです:
public class UpdateContact : IReturn<UpdateContactResponse>
{
public Guid Id { get; set; }
public string Reference { get; set; }
public string Notes { get; set; }
public List<Accounts> Accounts { get; set; }
}
public class UpdateContactResponse : ResponseBase
{
public Guid ContactId { get; set; }
}
public class UpdateContactValidator : AbstractValidator<UpdateContact>
{
public UpdateContactValidator(IValidator<AccountDetail> accountDetailValidator)
{
RuleSet(ApplyTo.Post | ApplyTo.Put,() => {
var session = base.Request.GetSession() as CustomAuthSession;
RuleFor(c => c.Reference).Must(x => !string.IsNullOrEmpty(x) && session.Region.GetCountry() == RegionCodes.AU);
});
RuleFor(R => R.Accounts).SetCollectionValidator(accountDetailValidator);
}
}
は、私が欠けているものはありますか?
ので、これはと行うにはないSS – Jeff
@Jeffいやに固有の「実行順序」の知識の詳細ですリクエストパイプラインでは、依存関係が注入される前に 'RuleSet()'ラムダがコンストラクタで実行されます。適切に注入されたバリデータにアクセスできるバリデーションで 'RuleFor()'ラムダが実行されます。 – mythz
ありがとうございますが、単一レベルの検証のために動作しますが、今では入れ子になったバリデータ 'RuleFor(R => R.Accounts).SetCollectionValidator(accountDetailValidator);を追加すると' accountDetailValidatorはRequestオブジェクトを解決していないようです。私はまた質問を更新しました。 – vonec