Jak Mogę uzyskać wartość zmiennej sesji wewnątrz metody statycznej?
Używam ASP.NET metody strony z jQuery.... Jak uzyskać wartość zmiennej sesyjnej wewnątrz statycznej metody w C#?
protected void Page_Load(object sender, EventArgs e)
{
Session["UserName"] = "Pandiya";
}
[WebMethod]
public static string GetName()
{
string s = Session["UserName"].ToString();
return s;
}
Kiedy kompiluję to dostaję błąd:
Odniesienie do obiektu jest wymagane dla systemu niestatycznych pól, metod lub właściwości.Www.UI.Strona.Sesja.get "
4 answers
HttpContext.Current.Session["..."]
HttpContext.Current
daje Ci prąd ... Cóż, kontekst Http; z którego można uzyskać dostęp: Session, Request, Response itp
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-01-15 07:55:31
Jeśli nie zmieniłeś wątku, możesz użyć HttpContext.Current.Session
, jak wskazuje jwwishart.
HttpContext.Current
zwraca kontekst powiązany z wątkiem. Oczywiście oznacza to, że nie możesz go użyć, jeśli na przykład rozpocząłeś nowy wątek. Ty Może również trzeba rozważyć zwinność wątku - ASP.NET żądania nie zawsze wykonują się w tym samym wątku dla całego żądania. Wierzę, że kontekst jest odpowiednio propagowany, ale trzeba o tym pamiętać.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-11 12:13:33
Spróbuj tego:
HttpContext.Current.Session["UserName"].ToString();
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-06-11 16:00:18
Możesz uzyskać dostęp do bieżącego Session
poprzez HttpContext.Current
- właściwość static , za pomocą której można pobrać instancję HttpContext
, która ma zastosowanie do bieżącego żądania sieci web. Jest to powszechny wzorzec w statycznym kodzie aplikacji i metodach statycznych stron.
string s = (string)HttpContext.Current.Session["UserName"];
Ta sama technika jest używana, aby uzyskać dostęp do Session
z wewnątrz ASMX Web metod ozdobionych [WebMethod(EnableSession = true)]
ponieważ chociaż takie metody nie są statyczne, nie dziedziczą z Page
, a tym samym nie mają bezpośredniego dostępu do Session
własność.
Statyczny kod może uzyskać dostęp do pamięci podręcznej aplikacji w ten sam sposób:
string var1 = (string)HttpContext.Current.Cache["Var1"];
Jeśli statyczny kod znajduje się wewnątrz innego projektu, musimy odwołać się do System.Web.dll
. Jednak w tym przypadku jest ogólnie najlepiej unikać takiej zależności, ponieważ jeśli kod jest wywoływany spoza ASP.NET kontekst {[5] } będzie null
, z oczywistych powodów. Zamiast tego możemy wymagać HttpSessionState
jako argumentu (nadal będziemy potrzebować odniesienia do System.Web
z "kurs": {]}
public static class SomeLibraryClass
{
public static string SomeLibraryFunction(HttpSessionState session)
{
...
}
}
Wywołanie:
[WebMethod]
public static string GetName()
{
return SomeLibraryClass.SomeLibraryFunction(HttpContext.Current.Session);
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-11 12:13:25