Метод SPSite.Exists
проверяет, существует ли семейство сайтов по указанному URL.Но возвращает false
, если URL-адрес указывает на вложенную сеть семейства сайтов.
Учитывая следующую структуру:
http://server -> site collection
http://server/web -> sub web
http://server/sites/somesite -> site collection
SPSite.Exists(new Uri("http://server")) // returns true
SPSite.Exists(new Uri("http://server/web")) // returns false
SPSite.Exists(new Uri("http://server/sites/somesite")) // returns true
Если вы хотите проверить, есть лиweb по указанному URL, вы должны использовать метод SPSite.OpenWeb(string url, bool requireExactUrl)
:
public static bool SiteExists(string url)
{
try
{
using (SPSite site = new SPSite(url))
{
using (SPWeb web = site.OpenWeb(url, true))
{
return true;
}
}
}
catch (FileNotFoundException)
{
return false;
}
}
Конструктор SPSite
принимает любой URL, указывающий на вложенный элемент семейства сайтов.Даже если в указанном месте нет элемента.
new SPSite("http://server/this/does/not/exist");
Этот отсканированный код вернет семейство сайтов, расположенное по адресу http://server.
Хотя в большинстве случаев это очень полезно, существуют ситуации, когдаэто опасноРассмотрим следующий метод:
public static void DeleteSite(string url)
{
new SPSite(url).Delete();
}
Если этот метод вызывается с http://server/this/does/not/exist, то самое верхнее семейство сайтов на http://server будет удалено.