Есть ли альтернатива SPContext.Current.Web.currentUser?
Вопрос
Я обнаружил, что SPContext.Current.Web.CurrentUser
действительно ненадежен.Один из десяти просит, что объект возвращается в виде null
.
Есть ли альтернатива SPContext.Current.Web.CurrentUser
?
У кого-нибудь еще видели эту ненадежность?
Есть ли там исправления?
Решение
Было бы здорово, если вы опубликовали оскорбительный код и его окрестности, но некоторые вещи, чтобы рассмотреть из вершины моей головы:
- Вы можете получить объект слишком рано в жизненном цикле (скажем, методы преимирования и такие, или httpmodule etc)
- Вы можете взломать трубопровод, делая такие вещи, как настроить httpContext, чтобы нулевые (я видел, что в SharePoint WearaRounds до)
- Вы можете быть за обратным прокси, например, Apache или NGINX, заставляя свои наконечники с ума сойти с ума, попробуйте тестировать код за пределами вашей среды
- и некоторые "- зеленый свет один" для проблем с аппаратными обеспечениями, пул приложения, достигая максимальной оперативной памяти или отсутствие его, SQL Server Busy
- Вы можете использовать некоторое невежество Pinvoke, что делает интегрированную аутентификацию Go Bananas
- Если вы используете FBA, настройки поставщика и наличие бэкэнда (AD, XML-файл, членство в SQL) могут быть сбоя - но это вряд ли для этого будет другая ошибка.
- Отпущенный раздел HttpModules Section любит сломать вещи, которые вы пытались в новом webaplication с нулевыми изменениями?
- Мне нравится номер восемь, поэтому я думал, что я должен дать ему восемь расплывчатых идей
TL; DR: Опубликовать свой код :)
Другие советы
Я имел только это, когда я забуду, что я называю это вне контекста.
Вы уверены, что вы не пытаетесь назвать это в рамках SPSecurity.RunWithElevatedPrivileges()
?
Пожалуйста, попробуйте с этим ..
SPWeb spWeb = Microsoft.SharePoint.WebControls.SPControl.GetContextWeb(System.Web.HttpContext.Current);
SPUser user = spWeb.CurrentUser;
.
или
using (SPSite spsite = new SPSite(url))
{
using (SPWeb spweb = spsite.OpenWeb())
{
userObj = spweb.CurrentUser;
}
}
.
plz также попробуйте с помощью RunwithelevatedPreviliges () ...