在Http Handler ashx中获取会话

时间:2010-02-24 19:58:31

标签: asp.net-mvc httphandler

我正在使用Http Handler ashx文件来显示图像。 我正在使用Session对象来获取图像并在响应中返回

现在的问题是我需要使用自定义Session对象,除了HttpSession状态上的Wrapper之外什么但是当我试图让现有的自定义会话对象创建新的... 它没有显示会话数据,我检查了会话ID,这也是不同的 请注意我如何在ashx文件中获得现有会话?

注意:当我使用ASP.NET Sesssion时,它的工作正常

 [WebService(Namespace = "http://tempuri.org/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    public class GetImage : IHttpHandler, System.Web.SessionState.IRequiresSessionState 
    {

3 个答案:

答案 0 :(得分:2)

当您想要从ASHX或HttpHandler访问会话状态时,如果需要读/写访问权限,则需要实现IReadOnlySessionState或IRequiresSessionState。

答案 1 :(得分:1)

事实上,这是一个ashx应该是无关紧要的 - 假设请求是从现有会话的请求产生的;我认为它应该是 - 但是确切地检查请求是如何形成的可能是值得的。总是付钱回归基础:)

假设没问题,这就是我一直在做的事情:

string sessionId = string.Empty; 
System.Web.SessionState.SessionIDManager sessionIDManager = new System.Web.SessionState.SessionIDManager();
bool supportSessionIDReissue;
sessionIDManager.InitializeRequest(httpContext, false, out supportSessionIDReissue); sessionId = sessionIDManager.GetSessionID(httpContext);
if (sessionId == null)
{
 // Create / issue new session id: 
 sessionId = sessionIDManager.CreateSessionID(httpContext);
}

在此结束时,sessionId变量将(应该)包含现有的会话ID,或者您可以在以后重复使用的新创建的会话ID。

答案 2 :(得分:0)

你可以使用Actionresult而不是这个

的处理程序
return new FileStreamResult(new FileStream(path, FileMode.Open), "image/jpeg");

return(new FileResult(Pathtoimage,“image / jpeg”));

这会使事情变得更容易,因为你将使用控制/动作作为你的网址

<img src="/Images/showImage/1">

然后你可以让你的行为处理任何事情,比如从db中拉出字节 流式传输,检查验证等