1

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

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

Authenticated: @user.IsAuthenticated    

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

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

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

4

2 回答 2

1

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

@inherits ViewPage

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

<h1>@user.IsAuthenticated</h1>
于 2013-05-07T15:31:56.030 回答
0

好吧...如果您只是提供使用 _Layout (或父)页面的静态内容(即呈现一个不受服务“支持”的页面,例如主页),我认为您无法检索会话对象,因为请求将为空。

如果您正在呈现由服务支持的页面并且它使用 _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().Get(key)

希望这可以帮助。

于 2013-05-07T15:10:17.593 回答