2009-06-29 18 views
47

io sono trying to store some values in the Session from a Handler page, prima di fare un redirect ad una pagina WebForms, che prenderà la sessione valori e pre-fill il WebForm:ASP.NET: come accedere alla sessione dal gestore?

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

Tranne context.Session oggetto è nullo.

Come accedere allo stato sessione da un gestore?

risposta

104

Implementare l'interfaccia di System.Web.SessionState.IRequiresSessionState

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

} 
+0

Nota: non è necessario implementare realmente nulla, basta aggiungere l'interfaccia alla classe. Il server Web vede quindi che lo chiedi e lo riempie. –

+3

Sì, che sta ancora implementando l'interfaccia ma dal momento che si tratta di un'interfaccia marcatore non c'è alcun codice che dobbiamo scrivere oltre alla derivazione dell'interfaccia . – JoshBerke

+0

Per qualche ragione il mio non funzionerebbe, anche con 'IRequiresSessionState' specificato. Ho dovuto usare 'IReadOnlySessionState'. Non ho ancora cercato perché, ma funziona ... – wasatchwizard

10

Implementare IRequiresSessionState

7

Does attuazione iRequiresSessionState risolvere questo?

Che dire invece di eseguire un modulo IHttp e ignorare BeginRequest?

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

Sì ... –

+0

Qualcuno sa qual è il rendimento migliore? –

+1

sto affrontando lo stesso problema ho usato iRequiresSessionState nel mio codice gestore, ma ancora non riesco ad accedere ai valori di sessione. le chiavi di sessione sono ancora 0. Qualcuno può dirmi su questo? –