未保存在ServiceStack中的会话
问题描述:
我想使用会话功能但没有进行身份验证。 我已经加入到Plugins.Add(new SessionFeature())
和AppHost.cs
我有以下代码未保存在ServiceStack中的会话
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
。 我在执行会话时丢失了什么?
答
您将需要使用base.SaveSession()保存会话。靠近底部的here有一个小节标题'保存在服务'。
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的问题与扩展方法,请参阅here,这似乎影响SaveSession()。 变通:
-
ServiceExtensions.SaveSession(this, CustomSession);
ReSharper的可提示格式化,它会工作。 - Ctrl-Alt-空格重新格式化
-
RequestContext.Get<IHttpRequest>().SaveSession(CustomSession)
可以保存 会话。
我试过,但我得到这个错误:ServiceStack.ServiceInterface.Service'不包含'SaveSession'的定义谢谢 – user2170206 2013-03-14 17:15:12
您使用ReSharper吗?我用一些解决方法更新了我的答案。 – paaschpa 2013-03-14 17:32:03
是的,我使用ReSharper,你的工作似乎部分工作,但是当我运行代码时,调用SaveSession时出现错误,它说:{“值不能为null。\ r \ nParameter name:source”}。另外,对于“sess”,我不能使用自定义类型或字符串,而是使用AuthUserSession。 – user2170206 2013-03-14 18:32:05