我正在使用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
{
答案 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中拉出字节 流式传输,检查验证等