【问题标题】:Getting Session in Http Handler ashx在 Http Handler ashx 中获取会话
【发布时间】:2010-05-24 01:30:15
【问题描述】:

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

现在的问题是我需要使用自定义会话对象,它只是 HttpSession 状态上的包装器但是当我试图获取现有的自定义会话对象时,它会创建新的... 它没有显示会话数据,我检查了会话 ID,它也不同 请告诉我如何在 ashx 文件中获取现有会话?

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

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

【问题讨论】:

  • 您是否使用 IRequiresSessionState 标记您的处理程序?
  • 感谢您的回复,是的,我复制了主要问题中的代码.. 请看看

标签: asp.net-mvc httphandler


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    它是 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..

    【讨论】:

      【解决方案3】:

      您可以只使用 Actionresult 而不是处理程序

      return new FileStreamResult(new FileStream(path, FileMode.Open), "image/jpeg");
      

      return(new FileResult(Pathtoimage, "image/jpeg"));

      这应该会让事情变得更容易,因为您将使用控件/操作作为您的网址

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

      然后您可以让您的操作处理任何事情,例如从 db 中提取字节 流式传输、检查验证等

      【讨论】:

      • 我相信这只适用于 ASP.NET MVC。 OP 是关于自定义 HttpHandler 的。没有控制器也没有动作......
      • 问题是asp.net mvc问题!!!他还说他试图从 winforms 获取图像,他可能使用 httpHandler 来做到这一点,但是 MVC 是一种设计模式,所以为什么要打破这种模式,该模式可以正常工作而无需使用任何 httpHandler,因为它被替换为控制器/动作,你最好留下一个解决方案!!!!
      • 您的解决方案将起作用..但是图像的路径是什么?我无法在服务器端存储图像.. 与 http 处理程序相比,控制器再次执行此操作将花费更多时间
      猜你喜欢
      • 1970-01-01
      • 2011-04-20
      • 1970-01-01
      • 2011-01-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-17
      相关资源
      最近更新 更多