2012-03-10 15 views
5

tengo el siguiente controlador sencillo (eliminado algo de código para vissibilty vosotros, pero el siguiente todavía falla)¿Sesión en controlador genérico?

<%@ WebHandler Language="C#" Class="DownloadHandler" %> 
using System; 
using System.Web; 

public class DownloadHandler : IHttpHandler 
{ 
    public void ProcessRequest(HttpContext context) 
    { 
     if (context.Session["t1"] != "true") 
     { 

     } 
    } 

    public bool IsReusable 
    { 
     get 
     { 
      return false; 
     } 
    } 
} 

La línea if (context.Session["t1"] != "true") está fallando con "referencia a objeto no establecida a una instancia de un objeto". y no entiendo por qué es eso?

+0

¿Qué objeto es 'nulo'? ¿Es 'context' o' context.Session'? – svick

+2

Lo siento, encontré la respuesta a mi propia pregunta. Debe agregarse 'IRequiresSessionState' (como' public class DownloadHandler: IHttpHandler, IRequiresSessionState') – brother

Respuesta

11

Esto se debe a que para el controlador http para acceder a Session debe implementar explícitamente la interfaz IRequiresSessionState.

Tenga en cuenta que si hace eso habrá un bloqueo implícito en el objeto de sesión y no podrá tener múltiples controladores en el mismo estado de sesión procesados ​​simultáneamente.

También hay una interfaz IReadOnlySessionState para acceso de estado de sesión de solo lectura.

+0

me estoy enfrentando el mismo problema que utilicé iRequiresSessionState en el código de mi controlador, pero todavía no puedo acceder a los valores de la sesión. las claves de sesión todavía son 0. ¿alguien puede decirme sobre esto? –

Cuestiones relacionadas