ProgramingTip

C #에서 세션 변수가 null인지 비어 있는지 확인하는 가장 좋은 방법은 무엇입니까?

bestdevel 2020. 10. 16. 07:44
반응형

C #에서 세션 변수가 null인지 비어 있는지 확인하는 가장 좋은 방법은 무엇입니까?


ASP.NET C #에서 세션 변수의 존재를 확인하는 가장 좋은 방법은 무엇입니까?

나는 String.IsNullOrEmpty동화에 작품 을 사용하는 것을 좋아하고 Session. 현재 내가 아는 유일한 방법은 다음과 가능합니다.

 var sSession;
 if (Session["variable"] != null)
 {
     sSession = Session["variable"].ToString();
 }
 else
 {
     sSession = "set this";
     Session["variable"] = sSession;
 }

다른 사람들이 말한 것을 믿습니다. 나는 두 개의 레이어를 사용합니다.

핵심 계층. 이것은 거의 모든 웹 앱 프로젝트에 추가되는 DLL 서열이 있습니다 . 여기에는 세션 상태 게터 / 세터에 대한 지저분한 작업을 수행하는 SessionVars 클래스가 있습니다. 다음과 같은 코드가 포함되어 있습니다.

public class SessionVar
{
    static HttpSessionState Session
    {
        get
        {
            if (HttpContext.Current == null)
                throw new ApplicationException("No Http Context, No Session to Get!");

            return HttpContext.Current.Session;
        }
    }

    public static T Get<T>(string key)
    {
        if (Session[key] == null)
            return default(T);
        else
            return (T)Session[key];
    }

    public static void Set<T>(string key, T value)
    {
        Session[key] = value;
    }
}

모든 유형을 가져 왔습니다. 제네릭에 유의하십시오.

그런 다음 특정 유형, 특히 많이에 대해 Getters / Setters를 추가합니다. 사용자에게 제공되는 변수에 대해 null이 아닌 문자열이 있습니다.

예 :

public static string GetString(string key)
{
    string s = Get<string>(key);
    return s == null ? string.Empty : s;
}

public static void SetString(string key, string value)
{
    Set<string>(key, value);
}

등등 ...

그런 다음 래퍼를 만들어이를 추상화하고 응용 프로그램 모델로 가져옵니다. 예를 들어 고객 세부 정보가있는 경우 :

public class CustomerInfo
{
    public string Name
    {
        get
        {
            return SessionVar.GetString("CustomerInfo_Name");
        }
        set
        {
            SessionVar.SetString("CustomerInfo_Name", value);
        }
    }
}

아이디어가 맞습니까? :)

참고 : 수락 된 답변에 댓글을 추가 할 때 생각을했습니다. 상태 서버를 사용할 때 세션에 객체를 생성 할 때 항상 객체를 생성 할 수 있는지 확인하십시오. 웹 팜에서 제네릭을 사용하여 개체를 저장하고 저장하는 것이 너무나 쉬울 수 있습니다. 저는 직장에서 웹 팜에 배포 그래픽 코어 레이어의 코드에 생성가 내장 화 가능한지 확인하기 위해 검사를 추가했습니다. 세션 게터 및 세터를 캡슐화하는 또 다른 이점 :)


그것은 당신이하는 방법입니다. 그러나 사용할 수있는 더 짧은 구문이 있습니다.

sSession = (string)Session["variable"] ?? "set this";

이 세션 변수가 null이면 sSession을 "set this"로 설정하는 것입니다.


속성으로 포장하는 것이 더 우아하게 만들 수 있습니다.

string MySessionVar
{
   get{
      return Session["MySessionVar"] ?? String.Empty;
   }
   set{
      Session["MySessionVar"] = value;
   }
}

그런 다음 노드로 처리 할 수 ​​있습니다.

if( String.IsNullOrEmpty( MySessionVar ) )
{
   // do something
}

C # 3.0의 'as'표기법은 매우 깨끗합니다. 모든 세션 변수는 nullable 객체이기 때문에 예외가 저장 염려없이 값을 가져 오기 자신의 유형이 지정된 변수에 넣을 수 있습니다. 대부분의 개체는 이러한 방식으로 처리 할 수 ​​있습니다.

string mySessionVar = Session["mySessionVar"] as string;

내 개념은 세션 변수를 로컬 변수로 것입니다. 항상 세션 변수가 null 일 수 검증 가정하고 nullable이 아닌 유형으로 캐스트하지 않습니다.

nullable 형식이 아닌 변수가 필요한 경우 구문을 사용하여 사용해보십시오.

int mySessionInt;
if (!int.TryParse(mySessionVar, out mySessionInt)){
   // handle the case where your session variable did not parse into the expected type 
   // e.g. mySessionInt = 0;
}

제 생각에는 명확하고 읽기 쉬운 작업을 수행하는 가장 쉬운 방법은 다음과 있습니다.

 String sVar = (string)(Session["SessionVariable"] ?? "Default Value");

기본값 (문자열을 문자열로 캐스팅)의 경우에도 기본 문자열 값을 캐스팅하기 때문에 가장 효율적인 방법이 아닐 수 있지만 표준 코딩 방법으로 만들면 모든 데이터 유형에 대해 작동합니다. 쉽게 읽을 수 있습니다.

예를 들어 (완전히 가짜 예이지만 요점을 보여줍니다) :

 DateTime sDateVar = (datetime)(Session["DateValue"] ?? "2010-01-01");
 Int NextYear = sDateVar.Year + 1;
 String Message = "The Procrastinators Club will open it's doors Jan. 1st, " +
                  (string)(Session["OpeningDate"] ?? NextYear);

나는 Generics 옵션을 좋아하지만 모든 곳에서 이것을 필요로하지 않는 한 과잉처럼 보입니다. 확장 메서드는 Session.StringIfNull ( "SessionVar") 및 Session [ "SessionVar"] = "myval"과 같은 "안전한"가져 오기 옵션을 갖도록 Session 개체를 특별히 확장하도록 수정할 수 있습니다. 이것은 Session [ "SessionVar"]를 통해 변수에 접근하는 단순성을 깨뜨리지 만, 깨끗한 코드이며, 필요한 경우 null 또는 string 인 경우 유효성 검사를 허용합니다.


아무것도 / Null을 확인하는 것이이를 수행하는 방법입니다.

객체 유형을 다루는 것은 갈 길이 아닙니다. 엄격한 유형을 선언하고 개체를 올바른 유형으로 캐스팅 해보십시오. (그리고 캐스트 힌트 또는 변환 사용)

 private const string SESSION_VAR = "myString";
 string sSession;
 if (Session[SESSION_VAR] != null)
 {
     sSession = (string)Session[SESSION_VAR];
 }
 else
 {
     sSession = "set this";
     Session[SESSION_VAR] = sSession;
 }

구문 위반에 대해 죄송합니다. 저는 매일 VB'er입니다.


일반적으로 세션의 항목에 대해 강력한 형식의 속성을 사용하여 SessionProxy를 만듭니다. 이러한 속성에 액세스하는 코드는 nullity를 확인하고 적절한 유형으로 캐스팅합니다. 이것에 대한 좋은 점은 모든 세션 관련 항목이 한곳에 보관된다는 것입니다. 코드의 다른 부분에서 다른 키를 사용하는 것에 대해 걱정할 필요가 없습니다 (그리고 왜 작동하지 않는지 궁금합니다). 그리고 의존성 주입과 조롱을 통해 단위 테스트로 완벽하게 테스트 할 수 있습니다. DRY 원칙을 따르고 합리적인 기본값을 정의 할 수도 있습니다.

public class SessionProxy
{
    private HttpSessionState session; // use dependency injection for testability
    public SessionProxy( HttpSessionState session )
    {
       this.session = session;  //might need to throw an exception here if session is null
    }

    public DateTime LastUpdate
    {
       get { return this.session["LastUpdate"] != null
                         ? (DateTime)this.session["LastUpdate"] 
                         : DateTime.MinValue; }
       set { this.session["LastUpdate"] = value; }
    }

    public string UserLastName
    {
       get { return (string)this.session["UserLastName"]; }
       set { this.session["UserLastName"] = value; }
    }
}

또한 속성에 세션 변수를 래핑하는 것을 좋아합니다. 여기에있는 setter는 사소하지만 get 메서드를 작성하여 종료 지점이 하나뿐입니다. 이를 위해 일반적으로 세션 변수의 값을 반환하기 전에 null을 확인하고 기본값으로 설정합니다. 이 같은:

string Name
{
   get 
   {
       if(Session["Name"] == Null)
           Session["Name"] = "Default value";
       return (string)Session["Name"];
   }
   set { Session["Name"] = value; }
}

}


이 메서드는 또한 Session 변수의 개체가 문자열이라고 가정하지 않습니다.

if((Session["MySessionVariable"] ?? "").ToString() != "")
    //More code for the Code God

그래서 기본적으로부터 문자열로 변환하기 전에 빈 문자열로 널 변수를 대체 ToString의 일부 Object클래스


문자열이라는 것을 알고 있다면 String.IsEmptyOrNull () 함수를 사용할 수 있습니다.


.NET 3.5를 사용하고 있습니까? IsNull 확장 메서드를 만듭니다.

public static bool IsNull(this object input)
{
    input == null ? return true : return false;
}

public void Main()
{
   object x = new object();
   if(x.IsNull)
   {
      //do your thing
   }
}

이러한 방식으로 이러한 키를 사용할 수 있는지 여부를 확인할 수 있습니다.

if (Session.Dictionary.ContainsKey("Sessionkey"))  --> return Bool

참고 URL : https://stackoverflow.com/questions/234973/what-is-the-best-way-to-determine-a-session-variable-is-null-or-empty-in-c

반응형