获取错误“对象引用未设置为对象的实例”

时间:2013-01-11 07:01:49

标签: c# .net session-state

在下面的代码中,我在“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;
    }

3 个答案:

答案 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";
}