2010-11-18 2 views
1

У меня есть вопрос. Я создал собственный класс в моем проекте, который содержит общедоступное статическое свойство ctx и assingn объект HttpContext.Current. Во время выполнения это свойство, похоже, ссылается на объект HttpContext, но класс ctx.Session равен null. Когда я отлаживаю свое приложение, левая часть выражения (ctx) не совсем то же самое, что и правая сторона (HttpContext.Current). почему это происходит?ASP.NET MVC HttpContext.Session объект

Grettings

ответ

1

HttpContext.Current одноэлементно только для этого запроса. Назначив HttpContext.Current статической переменной, вы будете делиться этим HttpContext.Current со всей областью, что может оказаться неправильным.

Сессия - это объект для каждого пользователя, а статический объект - объект широкого применения. Используйте статический разумно.

-1

Что бы я сделал, это было бы так.

1- статический класс (например: ContextFactory), который предоставляет текущий httpконтекст. Если он имеет HttpContext.Current, то он предоставляет это значение, если нет, то он предоставляет назначенный контекст. В вашем случае, 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- Тогда я изменить код UserSess к

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

искренне

+0

НЕ хранить сессию (= различное для каждого пользователя) в статической переменной (= одинаково для каждого пользователя)! –

+0

, как вы можете видеть, сеанс не сохраняется в статическом классе, если пользователь не устанавливает его (что должно быть сделано в тесте). Если он не установлен, он вернет контекст CURRENT http и CORRECT. – edokan

+0

Извините, я пропустил это –

Смежные вопросы