Question

j'ai trouvé ça SPContext.Current.Web.CurrentUser n'est vraiment pas fiable.Une demande sur dix concernant cet objet revient sous forme null.

Existe-t-il une alternative à SPContext.Current.Web.CurrentUser?

Quelqu'un d'autre a-t-il constaté ce manque de fiabilité ?

Existe-t-il une solution?

Était-ce utile?

La solution

Ce serait cool si vous avez posté le code fautif et son environnement, mais certaines choses à considérer hors de la tête:

  1. Vous pouvez obtenir l'objet trop tôt dans le cycle de vie (dire des méthodes de préinit, ou un tel, ou un httpmodule, etc.)
  2. Vous pouvez enfreindre le pipeline qui fait des choses comme la définition du httpContext à NULL (j'ai vu cela dans les solutions de contournement SharePoint avant)
  3. Vous serez peut-être derrière un proxy inverse comme Apache ou Nginx, faire de vos conserveries, essayez de tester le code en dehors de votre environnement
  4. et certains "est le voyant vert" pour les problèmes matériels, la pool d'applications atteignant la RAM du maxium ou le manque de celui-ci, SQL Server occupé
  5. Vous pouvez utiliser une certaine impersonnation de Pinvoke qui rend l'authentification intégrée Allez Bananas
  6. Si vous utilisez FBA, les paramètres du fournisseur et la disponibilité du backend (AD, fichier XML, membre SQL) peuvent être défaillants - mais cela est peu probable que ce soit une erreur différente.
  7. Une section des gammes httpModules httpModules aime briser les choses aussi, avez-vous essayé dans une nouvelle application WebApplication avec des modifications zéro?
  8. J'aime le numéro huit, alors je pensais que je devrais lui donner huit idées vagues

    TL; DR: Postez votre code :)

Autres conseils

Je n'ai vécu cela que lorsque j'oublie que je l'appelle hors de son contexte.

es-tu sûr de ne pas essayer d'appeler ça à l'intérieur SPSecurity.RunWithElevatedPrivileges() ?

plz essayer avec ceci ..

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

ou

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

PLZ Essayez également avec RunwithElevatedPreviliges () ...

Licencié sous: CC-BY-SA avec attribution
Non affilié à sharepoint.stackexchange
scroll top