2010-11-18 6 views
1

Ich habe eine Frage. Ich habe benutzerdefinierte Klasse in meinem Projekt erstellt, die öffentliche statische Eigenschaft CTX und Assingn HttpContext.Current Objekt enthält. In der Laufzeit scheint diese Eigenschaft auf das HttpContext-Objekt zu verweisen, aber die ctx.Session-Klasse ist null. Wenn ich meine App debugge, stimmt die linke Seite eines Ausdrucks (ctx) nicht genau mit der rechten überein (HttpContext.Current). Warum passiert das?ASP.NET MVC HttpContext.Session Objekt

Grettings

Antwort

1

HttpContext.Current ist ein Singleton nur für diese Anforderung. Wenn Sie HttpContext.Current einer statischen Variablen zuweisen, teilen Sie diese HttpContext.Current für einen gesamten Bereich, was möglicherweise nicht richtig ist.

Sitzung ist ein pro Benutzerobjekt, während statische ein applikationsweites Objekt ist. Verwenden Sie statisch weise.

-1

Was ich tun würde wäre so etwas.

1- eine statische Klasse (zB ContextFactory), die den aktuellen httpcontext liefert. Wenn es HttpContext.Current hat, dann stellt das diesen Wert bereit, wenn nicht, dann stellt es einen zugewiesenen Kontext bereit. In Ihrem Fall new Mock<HttpContextBase>();

public static class ContextFactory 
{ 
    private static HttpContextBase current = null; 

    public static HttpContextBase Current 
    { 
     get { return current ?? HttpContext.Current; } 
     set { current = value; } 
    } 
} 

2- Dann ändere ich den Code UserSess zu

public static class UserSess 
{ 
    public static UserID 
    { 
     get { return ContextFactory.Current.Session["UserID"]; } 
     set { ContextFactory.Current.Session["UserID"] = value; } 
    } 
    //... 
} 

aufrichtig

+0

Sie die Sitzung nicht speichern (= unterschiedliche pro Benutzer) in einer statischen Variablen (= die für jeden Benutzer gleich)! –

+0

Wie Sie sehen können, wird die Sitzung nicht in einer statischen Klasse gespeichert, es sei denn, der Benutzer legt sie fest (was in einem Test erfolgen muss). Wenn nicht festgelegt, wird der CURRENT-HTTP-Kontext und die CORRECT-Sitzung zurückgegeben. – edokan

+0

Entschuldigung, das habe ich verpasst –