Immer Fehler "der Objektverweis wurde nicht auf eine Instanz eines Objekts"
Unten In der code, den ich bekam eine Fehlermeldung "der Objektverweis wurde nicht auf eine Instanz eines Objekts" in der Linie der 'wenn' - Bedingung. Kann einer mir helfen mit dem, was ist Los mit meinem code.
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;
}
- Welche Linie ist das werfen der exception? Und warum sind Sie stört mit einem
if
- Anweisung, wenn die zwei Pfade die gleiche Sache zu tun? - vielleicht HttpContext -, Strom-oder Session ist null bei der Laufzeit? 😉
if
undelse
Teil haben die gleiche AussageSession.Clear()
! !- ich bearbeitet den code ..aber es ist immer noch die gleichen Fehler.
- mögliche Duplikate von Was ist ein "NullReferenceException" in .NET?
- ich habe schon gelesen, dass Frage..ich war nicht in der Lage zu finden, keine Lösung von ihm..also habe ich diese Frage.
- hast du dann auch weder understoodnd die Antworten noch die Frage ... Zitat aus der erste Antwort: NullReferenceException bedeutet immer das gleiche. Sie versuchen, eine Referenz auf ein Objekt, aber Sie haben nicht initialisiert (oder es initialisiert werden, aber ist jetzt nicht initialisierten). nicht schwer ...
- Das ist schon klar - aber das sagt uns nicht, warum die Session initialisiert werden oder, wie dies zu tun. Nicht simpel -, dass nicht die Frage beantworten, vollständig.
- Verwandte - stackoverflow.com/questions/10629882/...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich vermute, dass Sie diesen code ausführen außerhalb einer ASP.NET -Anwendung.
HttpContext.Current
existiert nur im Kontext einer web-Anwendung. Wenn Sie jemals versucht, diesen code auszuführen, die außerhalb (z.B. in eine Konsole, desktop, unit-test, ...) es ist nie gonna Arbeit.Wenn das also eine Art von code, der in eine Bibliothek-Klasse soll wiederverwendet werden, die über unterschiedliche Anwendungen, die Sie haben, zu entfernen die Abhängigkeit von der
HttpContext
aus.Seite Bemerkung: deine if-Bedingung scheint irgendwie nutzlos, da Sie genau das gleiche tun im else als auch im if -> löschen der session.
public static void SetDataToSession<T>(this HttpSessionStateBase session, string key, object value) { .. }
und es stellt sich heraus, dass bull, weilsession
null ist, so zu tunsession[key] = value
wirft einenNullReferenceException
. code.msdn.microsoft.com/How-to-create-and-access-447ada98Solange Sie noch System.Web verwiesen in Ihren Aussagen, dann sollten Sie in der Lage sein, dies zu nutzen:
Oder
Im nicht sicher, warum würden Sie geben eine Zeichenfolge zurück, die eine ganze Zahl allerdings. Ein boolescher Wert, würde mehr Sinn machen, aber Sie sollten wirklich nicht brauchen, etwas in diesem Zusammenhang.
Auch, Ihre exception-handler versucht zu erwischen sqlexception, das könnte auch eine Quelle für eine Referenz auf ein Objekt Fehler, wie Sie scheinen nicht zu irgendwelche SQL-Objekte in dieser Funktion.
Ich würde wahrscheinlich tun Sie das folgende:
Bearbeiten: wenn Sie sind in der Tat Anrufe von außerhalb Ihres web-Projekt, Sie können geben Sie nur den aktuellen httpcontext mit der folgenden Methode:
Session
ist eine Eigenschaft, die z.B.System.Web.UI.Page
-Instanz und kann zugegriffen werden über einenSystem.Web.HttpContext
-Instanz für Fälle, in denen Sie nicht über Zugriff auf eine Seite, control, ... deshalb müssen Sie mitSystem.Web.HttpContext.Current
, der null sein kann, wenn Sie ausgeführt werden, die außerhalb der web-Szenario! So... dieSession
-Eigenschaft beziehen Sie sich? eine andere Sache: wenn eine Ausnahme Auftritt, melden Sie diese mit einer generischen exception-handlercatch (Exception ex)
context.Current.Session != null
kann eine exception werfen, alscontext.Current
null sein kann ...context.Current
ist null - es wäre besser, wenn Sie eine weitere null-zu überprüfen, denn dies ist ein bekanntes Verhalten (etwas, Ausnahmen sollten nicht verwendet werden). eine andere Sache (und der Grund, warum ich immer noch ein downvote auf diese Antwort): Sie sind den Umgang mitSystem.Web.HttpContext
-Instanz, die nicht über eineCurrent
-Eigenschaft, sondern der Anrufer ist der Aufruf der Methode mit z.B.MemberLogOut(HttpContenxt.Current)
versuchen, die code
HttpContext.Current
könnte null sein Erster hand.