在下面的代码中,我在“if”条件的行中收到错误“对象引用未设置为对象的实例”。任何人都可以帮我解决我的代码有什么问题。
public string MemberLogOut()
{
string ret = string.Empty;
try
{
if (HttpContext.Current.Session.Count > 0)
HttpContext.Current.Session.Clear();
ret="1";
}
catch (SqlException ex)
{
throw new Exception(ex.Message);
ret="2";
}
return ret;
}
答案 0 :(得分:2)
只要你的using语句中引用了System.Web,那么你应该可以使用它:
if (Session != null) {Session.Clear();}
或者
if (Session != null) {Session.Abandon();}
我不知道为什么你会返回一个包含整数的字符串。布尔值会更有意义,但在这种情况下你真的不需要任何东西。
此外,您的异常处理程序正在尝试捕获sqlexception,它也可能是对象引用错误的源,因为您在此函数中似乎没有任何SQL对象。
我可能会这样做:
protected bool MemberLogOut()
{
try {
if (Session != null) {Session.Abandon();}
//do any logging and additional cleanup here
return true;
} catch {
return false;
}
}
编辑:如果您实际上是从Web项目外部进行调用,则可以将当前的httpcontext传递给以下方法:
protected bool MemberLogOut(HttpContext context)
{
try {
if (context != null && context.Session != null) {
context.Session.Abandon();
}
//do any logging and additional cleanup here
return true;
} catch (Exception ex) {
//log here if necessary
return false;
}
}
答案 1 :(得分:1)
任何人都可以帮我解决我的代码错误
我猜您在ASP.NET应用程序之外运行此代码。 HttpContext.Current
仅存在于Web应用程序的上下文中。如果您曾尝试在外部运行此代码(例如在控制台,桌面,单元测试......),它将无法运行。
因此,如果这是某种类库中的某种代码,旨在跨不同的应用程序重用,则必须从中删除对HttpContext
的依赖。
旁注:你的if条件似乎有点无用,因为你在else和if - >中做的完全相同。清理会议。
答案 2 :(得分:-1)
尝试该代码
public string MemberLogOut()
{
string ret = string.Empty;
try
{
if (HttpContext.Current.Session!=null)
{HttpContext.Current.Session.Clear();}
}
catch (SqlException ex)
{
throw new Exception(ex.Message);
}
return "1";
}