ServiceStack Validator - 请求未注入(inject)

标签 servicestack

我有一个验证器,我正在尝试使用一些 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/

相关文章:

c# - ServiceStack .NET Core 的 OAuth2 身份验证插件

servicestack - 是否可以通过ServiceStack服务HTML页面?

asp.net-core - ServiceStack - 即使使用 JsConfig,年、月和日参数也描述了无法表示的日期时间

ServiceStack 消息队列处理和 Profiler

unit-testing - 通过单元测试

ServiceStack AutoQuery 和字段术语或

c# - AutoFac DbContext 问题 - 在创建模型时无法使用

具有多个用户/密码的 ServiceStack CredentialAuthProvider

azure - Azure 上的 ServiceStack.Redis 超时

redis - 如何使用地理分布的 Redis 背板设置 ServiceStack ServerEvents