1

セッション機能を使用したいのですが、認証がありません。私はすでに追加Plugins.Add(new SessionFeature())AppHost.csており、次のコードがあります

public class CustomService : Service
{
public CustomResponse Any(CustomRequest pRequest)
{
    var CustomSession = base.Session.Get<CustomType>("MySession");//try to get the session
    if (CustomSession == null)
    {
        //create a new session
        CustomSession = new CustomType{MyId=1};
        base.Session["MySession"] = CustomSession;
        //base.Session.Set("MySession", CustomSession); //also tried this, to save the session.
        this.SaveSession(CustomSession,  new TimeSpan (0,20,0)); //Save the Session

    } 
}
}

私が抱えている問題は、それbase.Session.Get<CustomType>("MySession")が常にあるということですnull。セッションの実装で何か不足していますか?

4

1 に答える 1

1

base.SaveSession()を使用してセッションを保存する必要があります。下部の近くに「 SavinginService 」というタイトルのセクションがあります

public class MyAppHost : AppHostBase
{
    public MyAppHost() : base("MyService", typeof(CustomService).Assembly)
    {
    }

    public override void Configure(Container container)
    {
       Plugins.Add(new SessionFeature()); 
    }
}


public class CustomType : AuthUserSession
{
    public int MyId { get; set; }
}

[Route("/CustomPath")]
public class CustomRequest
{
}

public class CustomResponse
{
}

public class CustomService : Service
{
    public CustomResponse Any(CustomRequest pRequest)
    {
        var CustomSession = base.SessionAs<CustomType>();
        if (CustomSession.MyId == 0)
        {
            CustomSession.MyId = 1; 
            this.SaveSession(CustomSession, new TimeSpan(0,20,0));
        }

        return new CustomResponse();
    }
}

アップデート:

拡張メソッドにはResharperの問題があります。ここを参照してください。これは、SaveSession()に影響を与えるようです。 回避策:

  • ServiceExtensions.SaveSession(this, CustomSession);ReSharperは再フォーマットを要求する場合があり、それは機能します。
  • Ctrl-Alt-スペースを再フォーマットします
  • RequestContext.Get<IHttpRequest>().SaveSession(CustomSession)セッションを保存できます。
于 2013-03-14T16:32:20.983 に答える