从单个Url打开SPWeb

时间:2010-03-31 15:04:54

标签: sharepoint

当我想要访问网络时,我通常必须执行以下代码,这些代码相当自我解释。

using (SPSite site = new SPSite(siteUrl))
            {
                SPWeb web = null;

                if (string.IsNullOrEmpty(webName))
                    web = site.RootWeb;
                else
                    web = site.AllWebs[webName];
                ...
                web.Close();
            }

给出一个直接指向网站的网址:

因此,在这种情况下,siteUrl将是:http://localhost/sites/testsite

和webName将是:testWeb

我想简单地从用户那里得到一些与这两个单独位相对的信息,即直接到网上的网址:http://localhost/sites/testsite/testweb/

我想使用此网址打开网页,而不必手动指定网页名称。我玩过site.OpenWeb并尝试将url传递给它,但它不喜欢这样。它只需要服务器相对URL。 有没有办法只是能够从用户那里获得一个网址,以便打开网络,而不是将网址拆开并假设最后一点可能是也可能不是网络的名称,这取决于我们是否“是否会访问根网站,但这会使代码更糟。”

3 个答案:

答案 0 :(得分:35)

您不需要拆分绝对SPWeb URL来访问SPWeb。您可以简单地执行以下操作。

using (SPSite site = new SPSite(<url to spweb>))
{
      using(SPWeb web = site.OpenWeb())
      {
         // put your code here ...
      }
}

答案 1 :(得分:1)

您可以将代码设置如下:

using (SPSite site = new SPSite(HttpContext.Current.Request.Url.ToString())) 
{
using (SPWeb web = site.OpenWeb())
{
 // TODO:.....
}
}

答案 2 :(得分:0)

同意Flo,但需要注意一些特殊细节。

如果使用没有参数的SPSite构造函数,则意味着您将使用默认URL区域创建实例。 共有5个sharepoint url区域,例如:1。默认,2。Intranet,3。Internet,4。Custom,5。Extranet。

区域将传入请求URL与传出URL相关联。可以为每个区域指定任意数量的传入请求URL,但每个区域只能指定一个传出URL。 必须始终存在与默认区域关联的传出URL。

  1. 的SPSite(GUID)
  2. 的SPSite(字符串)
  3. SPSite(Guid,SPUrlZone)
  4. SPSite(Guid,SPUserToken)
  5. SPSite(String,SPUserToken)
  6. SPSite(Guid,SPUrlZone,SPUserToken)
  7. 您还可以使用用户令牌创建实例,然后该站点实例将根据用户权限(作为站点中的用户登录名)。 总之,权限将与SPSite不同的构造函数不同,因此您必须小心使用它。

    有关详细信息,请访问以下网址:

    http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.spsite.spsite.aspx