在ServiceStack中模拟用户会话时未设置UserAuthId属性

时间:2016-11-21 23:45:01

标签: servicestack

我试图在BasicAppHost中模拟用户会话进行测试,如下所示:

TestMode = true;
container.Register<IAuthSession>(c => new AuthUserSession
        {
                UserAuthId = "1",
                Language = "en",
                PhoneNumber = "*****",
                FirstName = "Test",
                LastName = "User",
                PrimaryEmail = "test@emailtest.com",
                UserAuthName    = "testuser",
                TimeZone = "America/Guatemala"

            }
        );

但是,当从服务中检索会话时,将使用空值检索 UserAuthId 属性,并正确检索其他值。

我按如下方式检索用户会话:

var session = SessionAs<IAuthSession>();

在这里你可以看到de值检索值:

enter image description here

我正在使用服务堆栈V4.5

1 个答案:

答案 0 :(得分:1)

我无法重现此行为,这在以下示例中正常工作:

public class MockSessionTest {}

public class MockSessionTestService : Service
{
    public object Any(MockSessionTest request) => 
       SessionAs<AuthUserSession>();
}

using (var appHost = new BasicAppHost
{
    ConfigureAppHost = host => host.RegisterService(typeof(MockSessionTestService)),
    ConfigureContainer = x => x.Register<IAuthSession>(c => new AuthUserSession {
        UserAuthId = "1",
        Language = "en",
        PhoneNumber = "*****",
        FirstName = "Test",
        LastName = "User",
        PrimaryEmail = "test@emailtest.com",
        UserAuthName = "testuser",
    })
}.Init())
{
    var response = appHost.ExecuteService(new MockSessionTest()) as AuthUserSession;

    response.UserAuthId   //= 1
    response.UserAuthName //= testuser"
    response.PrimaryEmail //= test@emailtest.com
}

由于TestMode=true UserAuthId SessionAs<T>,我看不到它可以修改SessionAs<AuthUserSession>()

注意Plugins.Add(new AuthFeature(() => new CustomUserSession(), new IAuthProvider { ... })); 用于解析具体的用户会话类型,因此您通常会使用Running application... Which one is undefined或注册AuthFeature时注册的Custom UserSession,例如:

'mobileeyeclinic'@'localhost'

同时结帐just returns the Session that's registered in the Container以了解模拟会话的不同方法。