3

我有标准的 Hello World Web 服务,带有我的自定义用户身份验证会话,因为我需要一些额外的参数。身份验证部分按预期工作。下面是我的自定义用户会话:

public class CustomUserSession : AuthUserSession
{
    public int? PortalId { get; set; }

    public override void OnAuthenticated(ServiceInterface.IServiceBase authService, IAuthSession session, IOAuthTokens tokens, Dictionary<string, string> authInfo)
    {
        base.OnAuthenticated(authService, session, tokens, authInfo);
        var refId = session.UserAuthId;

        var userRep = new InMemoryAuthRepository();
        var userAuth = userRep.GetUserAuth(refId.ToString());
        PortalId = userAuth.RefId;
    }
}

我的 refId 保存了我的其他表之一的自定义参数,并且在我调试时它得到了正确的值。我的问题是,我现在可以从这个方法中调用 web 服务的方法吗?因此,例如,如果我有一个接受 int 的执行方法,我可以从重写的 OnAuthenticated 方法中调用它吗?

4

2 回答 2

2

您可以使用在 ServiceStack 中执行服务ResolveService<T>

从自定义用户会话内部:

using (var service = authService.ResolveService<MyService>())
{
    var response = service.Get(new MyRequest { ... });
}

从 ServiceStack 服务内部:

using (var service = base.ResolveService<MyService>())
{
    var response = service.Get(new MyRequest { ... });
}

从 ServiceStack 外部:

using (var service = HostContext.ResolveService<MyService>())
{
    var response = service.Get(new MyRequest { ... });
}
于 2014-01-30T01:57:20.533 回答
0

尝试解决ServiceInterface.IServiceBase正确的类/接口。这是一个示例IDbConnectionFactory

//Resolve the DbFactory from the IOC and persist the info
authService.TryResolve<IDbConnectionFactory>().Exec(dbCmd => dbCmd.Save(PortalId));
于 2014-01-29T19:18:20.083 回答