2009-12-16 95 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

相關問題