정적 메서드 내에서 세션 변수의 값을 어떻게 얻을 수 있습니까?
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.Web.UI.Page.Session.get'`에 대한 개체 참조가 필요합니다.
HttpContext.Current.Session["..."]
HttpContext.Current
당신에게 현재를 가져옵니다 ... 음, Http Context; 액세스 할 수있는 위치 : 세션, 요청, 응답 등
스레드를 변경하지 않은 경우 HttpContext.Current.Session
jwwishart에 표시된대로 사용할 수 있습니다 .
HttpContext.Current
스레드와 관련된 컨텍스트를 반환합니다. 이것은 예를 들어 새 스레드를 시작한 경우 사용할 수 없음을 의미합니다. 당신은 할 수있다 또한 스레드 민첩성을 고려할 필요 - ASP.NET 요청은 항상 요청의 전체에 대해 동일한 스레드에서 실행되지 않습니다. 나는 생각 문맥이 적절하게 전파되어 있지만, 마음에 곰에 뭔가.
이 시도:
HttpContext.Current.Session["UserName"].ToString();
현재 웹 요청에 적용되는 인스턴스를 검색 할 수 있는 정적 속성 인 현재 Session
를 통해 액세스 할 수 있습니다 . 이것은 정적 앱 코드 및 정적 페이지 메서드의 일반적인 패턴입니다.HttpContext.Current
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
명백한 이유로. 대신 a HttpSessionState
를 인수로 요구할 수 있습니다 ( System.Web
물론 여전히 참조가 필요합니다 ).
public static class SomeLibraryClass
{
public static string SomeLibraryFunction(HttpSessionState session)
{
...
}
}
요구:
[WebMethod]
public static string GetName()
{
return SomeLibraryClass.SomeLibraryFunction(HttpContext.Current.Session);
}
'developer tip' 카테고리의 다른 글
커밋을위한 Mercurial 체리 따기 변경 (0) | 2020.12.15 |
---|---|
size_t는 항상 서명되지 않습니까? (0) | 2020.12.15 |
iPhone 웹 응용 프로그램에서 스크롤을 비활성화 하시겠습니까? (0) | 2020.12.15 |
TortoiseSVN을 사용하여 이전 버전으로 되돌리기 (0) | 2020.12.15 |
Git에서 사용하는 용어 (0) | 2020.12.15 |