Existe-t-il une alternative à SPContext.Current.Web.CurrentUser ?
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?
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:
- 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.)
- 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)
- 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
- 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é
- Vous pouvez utiliser une certaine impersonnation de Pinvoke qui rend l'authentification intégrée Allez Bananas
- 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.
- Une section des gammes httpModules httpModules aime briser les choses aussi, avez-vous essayé dans une nouvelle application WebApplication avec des modifications zéro?
- 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 () ...