В ASP.net, как я могу использовать Cookies и Session из вспомогательных классов? - PullRequest
1 голос
/ 26 января 2012

Я занимаюсь загрузкой пользовательских данных в одном статическом классе, доступ к которому осуществляется с каждой из моих страниц aspx.Я хотел бы добавить функциональность для поддержки Cookies и Session в этом процессе.Однако я обнаружил, что объект Response.Cookies и объект Session недоступны для моего класса утилит.

По сути, то, что у меня сейчас есть (в своем собственном файле):

namespace myProject
{    
    static class myUtil
    {
        public static myProject.User LoadUser()
        {
            //Look up user
        }
    }
}

Что я хотел бы сделать:

namespace myProject
{    
    static class myUtil
    {
        public static myProject.User LoadUser()
        {
            if (Session['user'] != null)
            { user = Session['user']; }
            else if (Response.Cookies['user'] != null)
            { user = Response.Cookies['user']; }
            else
            {               
               //Look up user
            }
        }
    }
}

Как я могу это сделать?В текущей реализации все ссылки на Session и Response.Cookies рассматриваются как необъявленные объекты.

Для справки приведен текущий импорт для класса:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Text.RegularExpressions;
using System.Web.UI.Page;
using System.Web.UI.WebControls;

Ответы [ 5 ]

5 голосов
/ 26 января 2012

Сеанс в файле класса

using System;  
using System.Collections.Generic;  
using System.Linq;  
using System.Web;  
using System.Web.SessionState;  
/// <summary>  
/// Summary description for GetSessionHelper  
/// </summary>  
public class SessionHelper : IRequiresSessionState  
{  
    public object GetSession(string key)  
    {  
        //check session   
        if (HttpContext.Current.Session[key] != null)  
        {  
            //return session value  
            return HttpContext.Current.Session[key];  
        }  
        else  
        {  
            //return empty string  
            return string.Empty;  
        }  
    }  
}  

Файлы cookie в файле класса

 if (HttpContext.Current.Request.Cookies["CodeF"] != null)
 {
    string background = HttpContext.Current.Request.Cookies["CodeF"]["BackImage"].ToString();
        }
2 голосов
/ 26 января 2012

вы можете использовать HttpContext.Current.Session и HttpContext.Current.Request, но имейте в виду, что Session не доступен на всех фазах http-конвейера, например, если вы используете HttpModule, Session не назначен в BeginRequest

1 голос
/ 26 января 2012

Вы должны использовать это так, HttpContext.Current.Request.Cookies ["user"]

1 голос
/ 26 января 2012

Вы можете получить что угодно в HttpContext, используя статическую переменную HttpContext.Current. Это, правда, не рекомендуется - он связывает ваш код напрямую с asp.net и делает такие вещи, как написание тестов, настоящей болью. В общем случае вы можете захотеть использовать больше классов экземпляров, которые вы можете передавать в зависимостях, например, переменные сеанса, к которым вы хотите получить доступ.

1 голос
/ 26 января 2012

Большинство этих свойств доступно статическому члену HttpContext.Current.Смотри: http://msdn.microsoft.com/en-us/library/system.web.httpcontext.current.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...