programing

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

magicmemo 2023. 7. 15. 10:01
반응형

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

ASP.NEC#에 세션 변수가 있는지 확인하는 가장 좋은 방법은 무엇입니까?

나는 사용하기를 좋아합니다.String.IsNullOrEmpty()할 때 .Session현재 제가 아는 유일한 방법은 다음과 같습니다.

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

다른 사람들이 말한 것을 따라가는 것.저는 두 개의 층이 있는 경향이 있습니다.

코어 레이어. 이것은 거의 모든 앱 프로젝트에 추가되는 DLL 내에 있습니다.이 클래스에는 SessionVars 클래스가 있습니다. 이 클래스는 SessionVars 클래스로 Session 상태 geters/setter에 대해 grunt 작업을 수행합니다.다음과 같은 코드가 포함되어 있습니다.

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;
    }
}

모든 유형을 가져오는 데 필요한 일반 사항을 기록합니다.

그런 다음 특정 유형, 특히 문자열 작업을 자주 선호하기 때문에 특히 문자열에 대한 게터/세터를 추가합니다.사용자에게 제공된 변수에 대해 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인 경우 Session을 "설정"으로 설정합니다.

물건을 부동산에 싸는 것이 더 우아해질 수 있습니다.

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

그러면 끈으로 처리할 수 있습니다.

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

c# 3.0의 'as' 표기법은 매우 깨끗합니다.모든 세션 변수는 null 개체이므로 예외를 발생시킬 염려 없이 값을 가져와 자신의 유형 변수에 넣을 수 있습니다.대부분의 개체는 이러한 방식으로 처리할 수 있습니다.

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

제 개념은 세션 변수를 로컬 변수로 가져온 다음 적절하게 처리해야 합니다.항상 세션 변수가 null일 수 있다고 가정하고 null이 아닌 유형으로 캐스팅하지 마십시오.

null이 아닌 유형의 변수가 필요한 경우 TryParse를 사용하여 해당 변수를 가져올 수 있습니다.

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);

제네릭스 옵션이 마음에 들지만, 여기저기서 이걸 필요로 하지 않는 이상 그건 과잉 살상인 것 같습니다.확장 메서드는 Session 개체를 확장하여 Session과 같은 "안전한" 가져오기 옵션을 갖도록 수정할 수 있습니다.StringIfNull("SessionVar") 및 세션["SessionVar"] = "myval"; 세션을 통해 변수에 액세스하는 단순성을 없앱니다["SessionVar"], 그러나 이는 클린 코드이며 null인 경우에도 유효성 검사를 허용하거나 필요한 경우 문자열인 경우에도 유효성 검사를 허용합니다.

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

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

빈하는 것입니다.ToString는 의일니다입의 입니다.Object 시간

아무것도 확인하지 않고/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를 만듭니다.이러한 속성에 액세스하는 코드는 null을 확인하고 적절한 유형으로 캐스팅합니다.좋은 점은 제 세션과 관련된 모든 항목이 한 곳에 보관되어 있다는 것입니다.코드의 다른 부분에서 다른 키를 사용하는 것에 대해 걱정할 필요가 없습니다(그리고 왜 작동하지 않는지 궁금해합니다).그리고 의존성 주입과 조롱을 통해 단위 테스트로 충분히 테스트할 수 있습니다.DRAY 원칙을 따르고 합리적인 기본값을 정의할 수 있습니다.

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; }
    }
}

세션 변수를 속성으로 묶는 것도 좋아합니다.여기 세터들은 사소한 것이지만, 나는 get 메소드를 쓰는 것을 좋아해서 출구가 하나뿐입니다.이를 위해 일반적으로 null을 확인하고 세션 변수 값을 반환하기 전에 기본값으로 설정합니다.이와 같은 것:

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

}

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

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

문자열인 경우 문자열을 사용할 수 있습니다.Is EmptyOrNull() 함수입니다.

.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
   }
}

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

반응형