cra*_*ver 77 c# asp.net session
在ASP.NET C#中检查会话变量是否存在的最佳方法是什么?
我喜欢使用String.IsNullOrEmpty
字符串的作品,并想知道是否有类似的方法Session
.目前我所知道的唯一方法是:
var sSession;
if (Session["variable"] != null)
{
sSession = Session["variable"].ToString();
}
else
{
sSession = "set this";
Session["variable"] = sSession;
}
Run Code Online (Sandbox Code Playgroud)
Rob*_*per 111
继续其他人所说的话.我倾向于有两层:
核心层.这是在几乎所有Web应用程序项目中添加的DLL中.在这里我有一个SessionVars类,它为Session状态getter/setter做了笨拙的工作.它包含如下代码:
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;
}
}
Run Code Online (Sandbox Code Playgroud)
请注意获取任何类型的泛型.
然后我还为特定类型添加Getters/Setter,特别是字符串,因为我经常更喜欢使用string.Empty而不是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);
}
Run Code Online (Sandbox Code Playgroud)
等等...
然后我创建了包装器以将其抽象出来并将其引入应用程序模型.例如,如果我们有客户详细信息:
public class CustomerInfo
{
public string Name
{
get
{
return SessionVar.GetString("CustomerInfo_Name");
}
set
{
SessionVar.SetString("CustomerInfo_Name", value);
}
}
}
Run Code Online (Sandbox Code Playgroud)
你明白了吗?:)
注意:在为接受的答案添加评论时只是想一想.使用状态服务器时,始终确保将对象存储在Session中时可以序列化.在Web场上尝试使用泛型保存对象并且它会变得繁荣,这很容易.我在工作中部署在Web服务器场上,因此在核心层中添加了对我的代码的检查,以查看该对象是否可序列化,封装Session Getters和Setters的另一个好处:)
Ely*_*Ely 17
这就是你如何做到的.但是,您可以使用更短的语法.
sSession = (string)Session["variable"] ?? "set this";
Run Code Online (Sandbox Code Playgroud)
这是说如果会话变量为null,则将sSession设置为"set this"
Gre*_*gle 14
将它包装在属性中可能会使事情变得更加优雅.
string MySessionVar
{
get{
return Session["MySessionVar"] ?? String.Empty;
}
set{
Session["MySessionVar"] = value;
}
}
Run Code Online (Sandbox Code Playgroud)
然后你可以把它当作一个字符串.
if( String.IsNullOrEmpty( MySessionVar ) )
{
// do something
}
Run Code Online (Sandbox Code Playgroud)
c#3.0中的"as"符号非常干净.由于所有会话变量都是可空对象,因此您可以获取该值并将其放入您自己的类型变量中,而无需担心抛出异常.大多数对象都可以这样处理.
string mySessionVar = Session["mySessionVar"] as string;
Run Code Online (Sandbox Code Playgroud)
我的概念是你应该将Session变量拉入局部变量,然后适当地处理它们.始终假设您的Session变量可以为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;
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
154419 次 |
最近记录: |