2011-12-09 12 views
4

URLが存在するのに、SPSite.Exists(url)がfalseを返す理由は誰も知りません。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

サイトコレクションは、指定されたURLに存在するかどうかを確認しSPSite.Exists方法のように見えるかもしれません。ただし、URLがサイトコレクションのサブWebを指している場合はfalseを返します。

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:あなたはメソッドSPSite.OpenWeb(string url, bool requireExactUrl)を使用する必要が与えられたURLに任意のWebがあるかどうかを確認したい場合は

 
    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を取ります。与えられた場所に要素がない場合でも。 //サーバー:

new SPSite("http://server/this/does/not/exist"); 

このスニップはのhttpにあるサイトコレクションを返します。

これはほとんどの状況で非常に便利ですが、これが危険な状況があります。 でhttp //サーバー/この///存在しない最上位のサイトコレクション://サーバーが削除されます。このメソッドはhttpで呼び出された場合

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

:次のような方法を考えてみましょう。

+0

情報に感謝します。 – kevin

+0

基本や本からSharePointを学ぶことができるいくつかのWebサイトを教えてください。 ありがとうございます。 – kevin

+0

SharePointの基礎を学ぶのに良いサイトはありません。私は自分のためにこのことを学んだ。何もない本やサイトがないことを意味するものではありません... – Stefan

2

ステファンの答えはほぼ正しいです。SPWeb指定されたURLに存在する場合ここで は、正確に決定する必要があり、完全なコードです:

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; 
    } 
} 
関連する問題