programing

정적 메서드 내에서 세션 변수 값을 가져오려면 어떻게 해야 합니까?

telebox 2023. 6. 26. 21:15
반응형

정적 메서드 내에서 세션 변수 값을 가져오려면 어떻게 해야 합니까?

jQuery...에서 ASP.NET 페이지 메서드를 사용하고 있습니다.C#에서 정적 메서드 내의 세션 변수 값을 가져오려면 어떻게 해야 합니까?

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

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

이 파일을 컴파일할 때 다음 오류가 발생합니다.

정적이 아닌 필드, 메서드 또는 속성 'System'에 대한 개체 참조가 필요합니다.웹.UI.페이지.세션.get'

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

HttpContext.Current현재... 음, Http Context를 제공합니다. 여기서 액세스할 수 있습니다.세션, 요청, 응답 등

스레드를 변경하지 않은 경우 다음을 사용할 수 있습니다.HttpContext.Current.Sessionjwishart로 표시된 바와 같이.

HttpContext.Current스레드와 연결된 컨텍스트를 반환합니다.이것은 예를 들어 새 스레드를 시작한 경우에는 사용할 수 없다는 것을 의미합니다.또한 스레드 민첩성을 고려해야 할 도 있습니다. ASP.NET 요청이 전체 요청에 대해 항상 동일한 스레드에서 실행되는 것은 아닙니다.맥락이 적절하게 전파된다고 생각하지만, 명심해야 할 부분입니다.

사용해 보십시오.

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

전류에 액세스할 수 있습니다.Sessionvia - 사용자가 검색할 수 있는 정적 속성HttpContext현재 웹 요청에 적용되는 인스턴스입니다.이것은 정적 앱 코드와 정적 페이지 메소드에서 일반적인 패턴입니다.

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

동일한 기술을 사용하여 액세스합니다.SessionASMX 웹 메소드 내에서 로 장식된[WebMethod(EnableSession = true)]왜냐하면 그러한 방법들은 정적이지 않지만 그들은 상속받지 않기 때문입니다.Page따라서 a에 직접 액세스할 수 없습니다.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);
}

언급URL : https://stackoverflow.com/questions/2577183/how-can-i-get-the-value-of-a-session-variable-inside-a-static-method

반응형