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 "

Author: Stephen Kennedy, 2010-04-05

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

 90
Author: jwwishart,
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ć.

 16
Author: Jon Skeet,
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();
 2
Author: Muhammad Awais,
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);
}
 1
Author: Stephen Kennedy,
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