Как я могу получить значение переменной сеанса внутри статического метода?


Я использую ASP.NET методы страницы с помощью jQuery.... Как получить значение переменной сеанса внутри статического метода в C#?

protected void Page_Load(object sender, EventArgs e)
{
    Session["UserName"] = "Pandiya";
}

[WebMethod]
public static string GetName()
{
    string s = Session["UserName"].ToString();
    return s;
}

когда я компилирую это, я получаю ошибку:

ссылка на объект требуется для нестатического поля, метода или системы свойств.Сеть.ПОЛЬЗОВАТЕЛЬСКИЙ ИНТЕРФЕЙС.Страница.Сессия.получить"

4 53

4 ответа:

HttpContext.Current.Session["..."]

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

Если вы не изменили поток, вы можете использовать HttpContext.Current.Session, Как указано jwwishart.

HttpContext.Current возвращает контекст, связанный с потоком. Очевидно, это означает, что вы не можете использовать его, если вы начали новую ветку, например. Ты мая также необходимо учитывать гибкость потока - ASP.NET запросы не всегда выполняются в одном потоке для всего запроса. Я верить что контекст распространяется соответствующим образом, но это то, что нужно учитывать разум.

попробуйте это:

HttpContext.Current.Session["UserName"].ToString();

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

string s = (string)HttpContext.Current.Session["UserName"];

тот же метод используется для доступа к Session из веб-методов ASMX, украшенных [WebMethod(EnableSession = true)] потому что пока такие методы не статичны они не наследуют от Page и таким образом не имеют прямого доступа к Session собственность.

статический код может получить доступ к Кэш Приложения точно так же:

string var1 = (string)HttpContext.Current.Cache["Var1"];

если статический код находится внутри другого проекта, нам нужно ссылаться System.Web.dll. Однако, в данном случае это вообще лучше избегать такой зависимости, потому что если код вызывается извне ASP.NET контекст HttpContext.Current будет null, по понятным причинам. Вместо этого мы можем потребовать HttpSessionState как аргумент (нам все равно понадобится ссылка на System.Web конечно):

public static class SomeLibraryClass
{
    public static string SomeLibraryFunction(HttpSessionState session)
    {
       ...
    }
}

звоните:

[WebMethod]
public static string GetName()
{
    return SomeLibraryClass.SomeLibraryFunction(HttpContext.Current.Session);
}