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
'programing' 카테고리의 다른 글
SonarQube SpringBoot 프로젝트의 "구성 가능한 이 응용프로그램 컨텍스트 닫기" (0) | 2023.07.15 |
---|---|
레이지 초기화graphql-spring에서 예외 발생 (0) | 2023.07.15 |
GitHub.com 에 대한 리포지토리 크기 제한 (0) | 2023.07.15 |
application.dev.properties 파일을 로드하지 않는 Springboot (0) | 2023.07.15 |
발송 시 특성이 작업(vuex)에 나타나지 않는 이유는 무엇입니까? (0) | 2023.07.15 |