2009-06-29 6 views
47

Jestem trying to store some values in the Session from a Handler page, zanim zrobić przekierowanie do strony WebForms, który będzie odebrać Sesja wartości i wstępnie wypełnić formularz internetowy:ASP.NET: Jak uzyskać dostęp do sesji z obsługi?

public class Handler : IHttpHandler 
{ 
    public void ProcessRequest(HttpContext context) 
    { 
     ... 
     context.Session["StackOverflow"] = "overflowing"; 
     context.Response.Redirect("~/AnotherPage.aspx"); 
     ... 
    } 
    ... 
} 

wyjątkiem context.Session obiekt jest null.

Jak uzyskać dostęp do stanu sesji z programu obsługi?

Odpowiedz

104

Wdrożenie interfejsu

public class Handler : IHttpHandler, System.Web.SessionState.IRequiresSessionState 
{ 
    public void ProcessRequest(HttpContext context) 
    {  
    context.Session["StackOverflow"] = "overflowing";  
    context.Response.Redirect("~/AnotherPage.aspx");  
    } 

} 
+0

Uwaga: nie musisz niczego implementować, po prostu dodaj interfejs do swojej klasy. Serwer sieciowy widzi, że o to pytasz, i wypełnia go. –

+3

Tak, który nadal implementuje interfejs, ale ponieważ jest to interfejs znacznika, nie ma kodu, który musimy napisać, a następnie wyprowadzenia interfejsu . – JoshBerke

+0

Z jakiegoś powodu mój nie działa, nawet z podanym 'IRequiresSessionState'. Musiałem użyć 'IReadOnlySessionState'. Nie zbadałem jeszcze dlaczego, ale działa. – wasatchwizard

7

Czy wdrożenie iRequiresSessionState rozwiązać ten problem?

Co zrobić z IHttpModule zamiast przesłonić BeginRequest?

public void Init(HttpApplication application) 
    { 
     application.BeginRequest += new EventHandler(context_BeginRequest); 
    } 
+0

Tak, to działa. –

+0

Czy ktoś wie, który jest lepszy pod względem wydajności? –

+1

Mam ten sam problem i użyłem iRequiresSessionState w moim kodzie obsługi, ale nadal nie mogę uzyskać dostępu do wartości sesji. klucze sesji są wciąż 0. czy ktoś może mi o tym powiedzieć? –

Powiązane problemy