如何从ServiceStack中的layoutfile获取会话对象?

时间:2013-05-07 14:09:28

标签: session servicestack

在所有其他页面中,我可以使用以下代码获取Session对象:

@{
    var user = Request.GetSession();
}

Authenticated: @user.IsAuthenticated    

当我尝试从布局文件中获取会话时,我收到此错误消息“无法编译模板。请查看错误列表以获取详细信息”。

我在这个项目中使用自托管,并且会话对象的使用方式与ASP.NET项目不同。

有人能指出我如何解决这个问题的正确方向吗?

2 个答案:

答案 0 :(得分:1)

使用ViewPage的GetSession<T>进入您的会话。

@inherits ViewPage

@{
    var user = GetSession<AuthUserSession>();
}

<h1>@user.IsAuthenticated</h1>

答案 1 :(得分:0)

嗯......如果您只是提供使用_Layout(或父)页面的静态内容(即呈现一个不是由服务“支持”的页面,如主页)我不认为你可以检索Session对象,因为Request将为null。

如果您正在渲染由服务支持的页面,并且它使用_Layout页面,我认为这样的事情应该有用......

@{
    var auth = false;
    if (Request != null)
    {
        var key = Request.Cookies["ss-id"];
        var sess = Cache.GetSession(key.Value);
        auth = sess.IsAuthenticated;
    }
}
Authenticated: @auth

这应该在使用ServiceStack的ASP.NET MVC / Razor应用程序的_Layout.cshtml文件中工作。我没有尝试使用ServiceStack.Razor。

<击> var key = SessionFeature.GetSessionKey()?? “”; var sess = AppHost.Resolve()。获取(键)

希望这会有所帮助。

相关问题