2009-12-16 11 views
14

W szczególności zmienne sesji. Mam .ashx w moim projekcie ASP.NET MVC, który pobiera dane obrazu do wyświetlenia użytkownikowi i muszę mieć dostęp do obiektu, który zapisałem w sesji. Od kontrolerów mogę ciągnąć obiekt dobrze, ale na mojej stronie ashx, kontekst.Session ma wartość zerową. jakieś pomysły? Dzięki!Jak uzyskać dostęp do HttpContext poza kontrolerami w ASP.NET MVC?

Oto przykład tego, co próbuję zrobić ... context.Session zawsze zwraca wartość 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

duplikat: http://stackoverflow.com/questions/1240732/how-can-i-use-session-variable-in-an-httphandler –

+0

Niezupełnie. .. moim problemem jest to, że nie mogę uzyskać dostępu do moich zmiennych sesji przechowywanych z mojego kontrolera MVC. Kiedy próbuję uzyskać dostęp do sesji poza kontrolerem, po prostu zwraca wartość null. – Arthurdent510

+0

nie jest twoim kodem w IHttpHandler? jeśli tak, to ten sam problem i rozwiązanie. –

Odpowiedz

2

Ok, więc co skończyło się to zrobić .... w moim pliku ashx, dodałem w interfejsie IReadOnlySessionState i będzie uzyskać dostęp do stanu sesji dobrze. Tak to wygląda mniej więcej tak ...

public class getIcon : IHttpHandler, IReadOnlySessionState 
17

musi importować zespół system.Web w kodzie, a następnie można zrobić coś takiego:

HttpContext context = HttpContext.Current; 

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

Montaż:

Dude, zrobiłem kilka testów i tutaj to działa dla mnie, spróbuj czegoś takiego:

Utwórz klasę pomocniczą, aby hermetyzować otrzymywanie zmiennych sesji, musi zaimportować zespół 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; 
      } 
     } 
    } 

Następnie w kontrolerze należy zrobić coś takiego:

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

I w twoich innych klas można wywołać klasy pomocnika:

return TextService.Message; 

dać to próba.

+0

To wciąż mówią, że sesja jest null, mimo że w stanie uzyskać dostęp do kilku różnych zmiennych sesji w kontrolerze. – Arthurdent510

+0

Utworzono zmienną sesji? Czy możesz pokazać tutaj jakiś kod? – Alaor

+0

Gdzie ustawiasz zmienną Sesja ["tokeny"]? – Alaor

Powiązane problemy