Вопрос

Я обнаружил, что SPContext.Current.Web.CurrentUser действительно ненадежен.Один из десяти просит, что объект возвращается в виде null.

Есть ли альтернатива SPContext.Current.Web.CurrentUser?

У кого-нибудь еще видели эту ненадежность?

Есть ли там исправления?

Это было полезно?

Решение

Было бы здорово, если вы опубликовали оскорбительный код и его окрестности, но некоторые вещи, чтобы рассмотреть из вершины моей головы:

  1. Вы можете получить объект слишком рано в жизненном цикле (скажем, методы преимирования и такие, или httpmodule etc)
  2. Вы можете взломать трубопровод, делая такие вещи, как настроить httpContext, чтобы нулевые (я видел, что в SharePoint WearaRounds до)
  3. Вы можете быть за обратным прокси, например, Apache или NGINX, заставляя свои наконечники с ума сойти с ума, попробуйте тестировать код за пределами вашей среды
  4. и некоторые "- зеленый свет один" для проблем с аппаратными обеспечениями, пул приложения, достигая максимальной оперативной памяти или отсутствие его, SQL Server Busy
  5. Вы можете использовать некоторое невежество Pinvoke, что делает интегрированную аутентификацию Go Bananas
  6. Если вы используете FBA, настройки поставщика и наличие бэкэнда (AD, XML-файл, членство в SQL) могут быть сбоя - но это вряд ли для этого будет другая ошибка.
  7. Отпущенный раздел HttpModules Section любит сломать вещи, которые вы пытались в новом webaplication с нулевыми изменениями?
  8. Мне нравится номер восемь, поэтому я думал, что я должен дать ему восемь расплывчатых идей

    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 () ...

Лицензировано под: CC-BY-SA с атрибуция
Не связан с sharepoint.stackexchange
scroll top