我有一个验证器,我正在尝试使用一些 session 变量作为验证逻辑的一部分,但是 base.Request 总是返回为 NULL。我已按照指示将其添加到 lambda 函数中,并且验证文档似乎已过时,如 Fluent validation for request dtos 中的提示。部分提到使用 IRequiresHttpRequest
,但 AbstractValidator 类已经实现了 IRequiresRequest
.
这是我的代码:
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);
}
}
有什么我想念的吗?
最佳答案
只能从 RuleFor()
中访问注入(inject)的依赖项。 lambda,代表 RuleSet()
在构造函数初始化时执行以设置该 RuleSet 的规则。
因此,您需要更改对 base.Request
的访问权限到RuleFor()
内 lambda :
RuleSet(ApplyTo.Post | ApplyTo.Put, () => {
RuleFor(c => c.Reference)
.Must(x => !string.IsNullOrEmpty(x) &&
(Request.GetSession() as CustomAuthSession).Region.GetCountry() == RegionCodes.AU);
});
关于ServiceStack Validator - 请求未注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37265875/