サイトコレクションは、指定された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();
}
:次のような方法を考えてみましょう。
パス比較は何をしますか? – kevin
サイトの管理パスを確認するための何か。 –
-1:このメソッドは、 'FileNotFoundException'以外の例外が発生した場合に' true'を返します。さらに、存在しない "サブサイトコレクション"を指すURLに対して 'true'を返します。私の答えを見てください。 – Stefan