exists (url)返回false,尽管url存在
本文关键字:url 尽管 false 存在 返回 exists | 更新日期: 2023-09-27 18:17:24
有人知道为什么 SPSite.Exists(url)
返回false,尽管url存在
如果检查上面的语句,它返回false。
但是如果我直接使用
就可以打开网站,没有任何问题SPSite myRootSite = new SPSite(url);
这是我的代码。
if (SPSite.Exists(new Uri(url)))
{
SPSite myRootSite = new SPSite(url);
}
更新:
对不起,我正在从我的业务层调用SharePoint,这是不允许的。
我的错!!
方法SPSite.Exists
检查指定URL上的站点集是否存在。但返回false
,如果URL指向一个网站集合的子网站。
给定以下结构:
<>之前http://server ->网站收集http://server/web ->子网站http://server/sites/somesite ->网站收集之前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最顶端的站点集合将被删除。
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;
}
}
实际上是SPSite方法。Exists尝试从您的Url创建一个站点,并尝试捕获一个异常。除此之外,它执行路径比较,这对您来说可能是不必要的。因此,如果你创建自己的方法来检查网站是否存在,这将远远超过OK。
这个方法可能看起来像
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;
}