2009-12-16 54 views
14

具体来说,会话​​变量。我有一个ashx的在是拉一些图像数据,以显示给用户的我的ASP.NET MVC项目,我需要能够访问,我已经存储在会话中的对象。从控制器我可以拉对象很好,但在我的ashx页面,context.Session为null。有什么想法吗?谢谢!如何在ASP.NET MVC控制器之外访问HttpContext?

这里是什么,我试图做一个例子... context.Session总是返回null。

private byte[] getIconData(string icon) 
    { 
     //returns the icon file 
     HttpContext context = HttpContext.Current; 

     byte[] buffer = null; 

     //get icon data 
     if (context.Session["tokens"] != null) 
     { 
      //do some stuff to get icon data 
     } 
    } 
+1

重复:http://stackoverflow.com/questions/1240732/how-can-i-use-session-variable-in-an-httphandler – 2009-12-16 23:36:22

+0

不是真的。 ..我的问题是,我无法访问我的MVC控制器存储的会话变量。当我尝试访问控制器之外的会话时,它只是返回null。 – Arthurdent510 2009-12-17 05:54:59

+0

不是您在IHttpHandler中的代码吗?如果是这样,这是同样的问题和解决方案。 – 2009-12-17 13:27:48

回答

2

好,所以我最后不得不做的....我的ashx的文件,我在IReadOnlySessionState界面添加,它会访问会话状态就好了。所以它看起来是这样的......

public class getIcon : IHttpHandler, IReadOnlySessionState 
17

您必须导入System.Web程序集在你的代码,然后你可以做这样的事情:

HttpContext context = HttpContext.Current; 

return (User)context.Session["User"]; 

编辑:

哥们,我在这里做了一些测试,它的工作对我来说,尝试这样的事情:

创建一个辅助类来封装你得到会话变量的东西,它必须进口System.Web程序集:

public class TextService 
    { 
     public static string Message { 
      get 
      { 
       HttpContext context = HttpContext.Current; 
       return (string)context.Session["msg"]; 
      } 
      set 
      { 
       HttpContext context = HttpContext.Current; 
       context.Session["msg"] = value; 
      } 
     } 
    } 

然后在您的控制器,你应该这样做:

TextService.Message = "testing the whole thing"; 
return Redirect("/home/testing.myapp"); 

而在你的其他类,你可以调用辅助类:

return TextService.Message; 

给它是一个尝试。

+0

它仍然说,会议为空,尽管能够访问控制器几个不同的会话变量。 – Arthurdent510 2009-12-16 22:41:18

+0

你已经创建了会话变量?你能在这里显示一些代码吗? – Alaor 2009-12-16 22:45:14

+0

你在哪里设置Session [“令牌”]变量? – Alaor 2009-12-16 22:54:44

相关问题