如何从ServiceStack中的布局文件获取会话对象?

问题描述:

从所有其他网页,我可以得到Session对象的保持与此代码:如何从ServiceStack中的布局文件获取会话对象?

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

Authenticated: @user.IsAuthenticated  

当我尝试从布局文件中获取的会议上,我得到这个错误消息“无法编译模板检查详细错误清单“。

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

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

那么......如果你只是提供使用_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 

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

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

希望这会有所帮助。

+0

我忘了提及我正在使用自托管。我用这个解决方案得到了一个N​​otImplemented错误(只支持通过单例可访问的ASP.NET请求)。 – Fossmo 2013-05-08 06:44:05

+0

根据附加上下文编辑答案。 – paaschpa 2013-05-08 17:29:18

+0

这似乎不起作用。我改变了我的页面结构。我现在使用@ Html.Partial而不是_Layout。这工作。 – Fossmo 2013-05-10 08:14:01

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

@inherits ViewPage 

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

<h1>@user.IsAuthenticated</h1> 
+0

我正在使用自托管,并且会话对象的行为与ASP.NET解决方案的行为不同。 – Fossmo 2013-05-08 06:41:28