Sharepoint OpenWeb () возвращает ноль, когда не залогинен - PullRequest
0 голосов
/ 15 сентября 2011

У меня есть веб-часть SP, которая извлекает данные из таблицы данных и отображает их в формате. Большинство экземпляров этой веб-части работают нормально, но эта конкретная возвращает ноль, когда она вызывается. Тем не менее, если я вошел на сайт (и не только), веб-часть возвращает список. Так странно Я проверил все вовлеченные веб-объекты, и все они наследуются от родительского объекта, для просмотра которого не требуется логин.

Вот фрагмент кода: (Имейте в виду, я унаследовал этот код, и он ни в коем случае не является «хорошим»)

public static DataTable GetDataTableFromSPList(string webUrl, string listName, Int32 numToReturn, string sortCol, string  ascend)
{
            SPListItemCollection coll = null;
            DataTable dt = null;

                string siteUrl = GetUrlPrefix();
                using (SPSite site = new SPSite(siteUrl + webUrl))
                {
                    using (SPWeb web = site.OpenWeb())  //this returns NULL when logged in anon???
                    {
                        try
                        {
                            SPList list = null;
                            list = web.Lists[listName];

                            SPQuery query = new SPQuery();
                            string qry = "<OrderBy><FieldRef Name='" + sortCol + "' Ascending='" + ascend.ToUpper() + "' /></OrderBy>";

                            query.Query = qry;
                            query.RowLimit = Convert.ToUInt32(numToReturn);
                            coll = list.GetItems(query);

                            if (coll != null)
                            {
                                dt = coll.GetDataTable();
                            }
                        }
                        catch (Exception ex)
                        {
                            WriteLog(ex.Message, System.Diagnostics.EventLogEntryType.Error);
                        }
                    }
                }

            return dt;
}

1 Ответ

1 голос
/ 15 сентября 2011

Я также никогда не сталкивался с этой проблемой, но после прочтения нескольких статей об этом кажется, что это «поведение по умолчанию».

Метод OpenWeb () возвращает «низшую» сетьон может найти, например:

и ваш код выглядит следующим образом:

var web = site.OpenWeb("subsite/subsite1");

веб-объект будет представлять «дочерний сайт», а не «дочерний сайт1», поскольку «дочерний сайт1» не существует.

В вашем случаеэто определенно вопрос разрешения.Разрешен ли анонимный доступ ко всему семейству сайтов или, если быть точным, он включен для сети, которую вы пытаетесь вызвать с помощью своего кода?Если да, могут ли пользователи (анонимно) открывать веб-страницы?

Самый простой способ исправить это - заключить метод в SPSecurity.RunWithElevatedPrivileges, однако он не очень элегантен.

Ссылка OpenWeb ()

SPSecurity.RunWithElevatedPrivileges Ссылка

...