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.CurrentWebアプリケーションのコンテキスト内にのみ存在します。このコードを外部(たとえば、コンソール、デスクトップ、単体テストなど)で実行しようとしても、機能しません。

したがって、これが異なるアプリケーション間で再利用することを目的としたクラスライブラリにあるある種のコードである場合は、HttpContextそこからの依存関係を削除する必要があります。

補足:if条件は、elseでもif->セッションのクリアでもまったく同じことをしているので、ちょっと役に立たないようです。

于 2013-01-11T07:04:57.843 に答える
-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";
}
于 2013-01-11T07:07:17.633 に答える