2013-05-07 93 views
1

從所有其他網頁,我可以得到Session對象的保持與此代碼:如何從ServiceStack中的佈局文件獲取會話對象?

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

Authenticated: @user.IsAuthenticated  

當我嘗試從佈局文件中獲取的會議上,我得到這個錯誤消息「無法編譯模板檢查詳細錯誤清單「。

我在這個項目上使用自託管,並且會話對象沒有以與ASP.NET項目相同的方式使用。

有人能告訴我如何解決這個問題的正確方向嗎?

回答

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 

這應該在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

1

使用ViewPage的GetSession<T>進入您的會話。

@inherits ViewPage 

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

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

我正在使用自託管,並且會話對象的行爲與ASP.NET解決方案的行爲不同。 – Fossmo 2013-05-08 06:41:28

相關問題