0

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

3 回答 3

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;
    }
}     
于 2013-01-11T07:57:17.713 回答
1

谁能帮我解决我的代码有什么问题

我猜您是在 ASP.NET 应用程序之外运行此代码。HttpContext.Current仅存在于 Web 应用程序的上下文中。如果您尝试在外部运行此代码(例如在控制台、桌面、单元测试中......),它永远不会工作。

因此,如果这是类库中的某种代码,旨在在不同的应用程序中重用,则必须从中删除HttpContext对它的依赖。

旁注:您的 if 条件似乎有点没用,因为您在 else 以及 if -> 清除会话中执行完全相同的操作。

于 2013-01-11T07:04:57.843 回答
-1

try that code

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";
}
于 2013-01-11T07:07:17.633 回答