2011-12-09 44 views
4

有沒有人知道爲什麼SPSite.Exists(url)返回false雖然url存在儘管url存在,SPSite.Exists(url)返回false

如果我檢查上面的語句,它返回false。

但我可以打開該網站沒有任何問題,如果我直接用

SPSite myRootSite = new SPSite(url); 

這裏是我的編碼。

if (SPSite.Exists(new Uri(url))) 
{ 
    SPSite myRootSite = new SPSite(url); 
} 

UPDATE:從不允許我的業務層的一個

對不起,我打電話的SharePoint。

我的錯!

回答

1

實際上,SPSite.Exists方法試圖從您的Url創建一個站點並嘗試捕獲一個異常。除此之外,它還會執行可能不必要的路徑比較。因此,如果您創建自己的方法來檢查網站是否存在,那將遠不止於此。

這種方法可能看起來像

public static bool SiteExists(string path){ 
SPSite site; 
try{ 
    site = new SPSite(path); 
} 
catch(FileNotFoundException e) 
{ 
    return false; 
} 
finally 
{ 
    if(site!=null) site.Dispose(); 
} 
return true; 
} 
+0

是什麼路徑比較呢? – kevin

+0

關於檢查網站的管理路徑。 –

+0

-1:如果發生除FileNotFoundException之外的其他異常,則此方法將返回「true」。另外,將爲指向不存在的「子網站集合」的URL返回「true」。看到我的答案。 – Stefan

13

的方法SPSite.Exists檢查網站集是否存在在指定的URL。但如果URL指向網站集的子網站,則會返回false

考慮以下結構:

 
    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 

如果你想檢查是否有在給定的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://服務器

雖然這在大多數情況下非常有用,但在有些情況下這很危險。請看下面的方法:

public static void DeleteSite(string url) 
{ 
    new SPSite(url).Delete(); 
} 

如果此方法被調用HTTP://服務器/這/沒有/沒有/存在最頂端的網站集在的http://服務器將被刪除。

+0

非常感謝您的信息。 – kevin

+0

您可以點我一些網站,我可以從基礎知識或任何書籍學習SharePoint。 在此先感謝。 – kevin

+0

我不知道任何適合學習SharePoint基礎知識的站點。我爲自己通過這樣做了解了這些東西。什麼不代表沒有任何書籍或網站在那裏... – Stefan

2

Stefan的回答幾乎是正確的。 下面是完整的代碼,它應該正確判斷,如果在給定的URL中存在的SPWeb:

public static bool WebExists(string absoluteUrl) 
{ 
    try 
    { 
     using (var site = new SPSite(absoluteUrl)) 
     { 
      using (var web = site.OpenWeb()) 
      { 
       return web.Exists; 
      } 
     } 
    } 
    catch (FileNotFoundException) 
    { 
     return false; 
    } 
} 
相關問題