Как я могу получить значение переменной сеанса внутри статического метода?
Я использую 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 ответа:
HttpContext.Current.Session["..."]
HttpContext.Current
возвращает текущую ... Ну, контекст Http; из которого вы можете получить доступ: сессия, запрос, ответ и т. д
Если вы не изменили поток, вы можете использовать
HttpContext.Current.Session
, Как указано jwwishart.
HttpContext.Current
возвращает контекст, связанный с потоком. Очевидно, это означает, что вы не можете использовать его, если вы начали новую ветку, например. Ты мая также необходимо учитывать гибкость потока - ASP.NET запросы не всегда выполняются в одном потоке для всего запроса. Я верить что контекст распространяется соответствующим образом, но это то, что нужно учитывать разум.
вы можете получить доступ к текущему
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); }