2009-08-06 6 views
7

Objectif: J'ai une vignette en tant que tableau d'octets en mémoire. Une fois qu'un utilisateur télécharge son image, je veux l'afficher dans un httphandler avant de l'écrire dans la base de données. J'ai utilisé ce code pour le lire avec succès et l'afficher à partir d'une base de données. Mais maintenant, je veux afficher de la session:Comment utiliser la variable Session dans un HttpHandler

Public Sub ProcessRequest(ByVal context As HttpContext) _ 
    Implements IHttpHandler.ProcessRequest 

    Dim oPhotoMgt As New PhotoMgt 
    Dim intPhotoID As Int32 = context.Request.QueryString("id") 
    Dim oPhoto As New Photo 
    oPhoto = oPhotoMgt.GetPhotoByID(intPhotoID) 

    context.Response.ContentType = "image/jpeg" 
    context.Response.BinaryWrite(oPhoto.Bytes.ToArray()) 
End Sub 

Répondre

15

Vous devriez marquer votre classe avec l'interface IRequiresSessionState (System.Web.SessionState espace de noms). Il n'a pas de méthodes ou de propriétés, donc vous ne devriez pas avoir à changer quoi que ce soit d'autre à propos de votre code.

La signature serait:

Imports System.Web 
Imports System.Web.SessionState 

Public Class MyHandler 
    Implements IHttpHandler, IRequiresSessionState 

    Public Sub ProcessRequest(ByVal context As HttpContext) _ 
     Implements IHttpHandler.ProcessRequest 

     context.Session("foo") = "bar" 
    End Sub 
End Class 
+0

Merci Thorarin. J'implémente IRequiresSessionState mais il ne peut toujours pas voir la variable de session. Je reçois «Name 'Session» n'est pas déclaré –

+0

Mise à jour de l'exemple pour démontrer l'utilisation de la session +1 à Jack :) – Thorarin

1

Thorarin était correcte. J'ai dû implémenter IRequiresSessionState. Ce que je ne savais pas était que je devais alors se référer à la variable

context.Session("oUser") 

au lieu de

Session("oUser") 
Questions connexes