1

他のすべてのページから、次のコードを使用して Session オブジェクトを取得できます。

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

Authenticated: @user.IsAuthenticated    

レイアウト ファイルからセッションを取得しようとすると、「テンプレートをコンパイルできません。詳細については、エラー リストを確認してください」というエラー メッセージが表示されます。

このプロジェクトではセルフ ホスティングを使用していますが、セッション オブジェクトは ASP.NET プロジェクトと同じようには使用されません。

誰かがこれを解決する方法について正しい方向に向けることができますか?

4

2 に答える 2

1

ViewPage を使用GetSession<T>してセッションにアクセスします。

@inherits ViewPage

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

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

ええと... _Layout (または親) ページを使用する静的コンテンツを提供しているだけの場合 (つまり、ホームページのように、サービスによって「サポート」されていないページをレンダリングしている場合)、 Request が null になるため、Session オブジェクト。

Service に裏打ちされたページをレンダリングしていて、それが _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 キー = SessionFeature.GetSessionKey() ?? ""; var sess = AppHost.Resolve().Get(キー)

お役に立てれば。

于 2013-05-07T15:10:17.593 に答える