Frage

Das habe ich gefunden SPContext.Current.Web.CurrentUser ist wirklich unzuverlässig.Einer von zehn Anfragen, dass das Objekt als zurückgegeben wird null.

Gibt es eine Alternative zu SPContext.Current.Web.CurrentUser?

Hat noch jemand diese Unzuverlässigkeit gesehen?

Gibt es da draußen eine Lösung?

War es hilfreich?

Lösung

Es wäre cool, wenn Sie den beleidigenden Code und seine Umgebung veröffentlichen würden, aber einige Dinge, die ich spontan bedenken sollte:

  1. Möglicherweise erhalten Sie das Objekt zu früh im Lebenszyklus (z. B. PreInit-Methoden usw. oder ein HttpModule usw.).
  2. Möglicherweise unterbrechen Sie die Pipeline, indem Sie beispielsweise den HttpContext auf null setzen (das habe ich bereits bei SharePoint-Problemumgehungen gesehen).
  3. Möglicherweise befinden Sie sich hinter einem Reverse-Proxy wie Apache oder Nginx, der Ihre KeepAlives verrückt macht. Versuchen Sie, den Code außerhalb Ihrer Umgebung zu testen
  4. Und einige „gibt grünes Licht“ für Hardwareprobleme, App-Pool erreicht das maximale RAM oder fehlt, SQL Server ist ausgelastet
  5. Möglicherweise verwenden Sie einen PInvoke-Identitätsbetrug, der die integrierte Authentifizierung ins Wanken bringt
  6. Wenn Sie FBA verwenden, schlagen möglicherweise die Anbietereinstellungen und die Backend-Verfügbarkeit (AD, XML-Datei, SQL-Mitgliedschaft) fehl – ​​dies ist jedoch unwahrscheinlich, da es sich um einen anderen Fehler handelt.
  7. Ein durcheinandergebrachter HttpModules-Abschnitt macht auch gerne Dinge kaputt. Haben Sie es schon in einer neuen Webanwendung ohne Änderungen versucht?
  8. Ich mag die Nummer Acht, deshalb dachte ich, ich sollte ihr acht vage Ideen geben

TL;DR:Poste deinen Code :)

Andere Tipps

Ich habe das nur erlebt, als ich vergesse, dass ich es aus dem Kontext gerissen bezeichne.

Bist du sicher, dass du nicht versuchst, dies nach innen zu rufen? SPSecurity.RunWithElevatedPrivileges() ?

Bitte versuchen Sie es damit.

SPWeb spWeb = Microsoft.SharePoint.WebControls.SPControl.GetContextWeb(System.Web.HttpContext.Current);
SPUser user = spWeb.CurrentUser;

oder

using (SPSite spsite = new SPSite(url))
                {
                    using (SPWeb spweb = spsite.OpenWeb())
                    {
                       userObj = spweb.CurrentUser;
                    }
                }

Bitte versuchen Sie es auch mit RunWithElevatedPreviliges()...

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit sharepoint.stackexchange
scroll top