在使用客户端对象模型的Sharepoint中,如何确定URL是否代表网站

时间:2011-05-05 21:04:48

标签: sharepoint

使用托管代码,我相信我可以执行以下操作,这些内容既可以告诉我URL是否有效,如果是,则代表网站。

using (SPSite site = new SPSite(url))
{
    using (SPWeb web = site.OpenWeb())
    {
       if (url.TrimEnd('/').EndsWith(web.ServerRelativeUrl.TrimEnd('/'))
       {
           // The url represents a site
       }
    }
}

我尝试使用客户端对象模型进行类似的操作。

ClientContext context = context = new ClientContext(url);
Web web = context.Web;
context.Load(web);
context.ExecuteQuery();

据我所知,如果URL表示除站点之外的其他内容(例如文件夹或库),则会抛出异常。这很好,因为我可以使用异常来确定URL是否代表一个站点。但我也希望能够区分有效但不代表网站的网址和无效的网址。

这可能吗?

1 个答案:

答案 0 :(得分:0)

当您说“一个根本无效的网址”时,您的意思是格式错误的网址,还是一个无法在任何地方解析的格式正确的网址?我很确定你的意思是前者。

如果您只是在寻找良好的形式,我建议您尝试将其解析为Uri对象:

string testUrl = "http://stackoverflow.com/";
Uri goodUri;
if (Uri.TryCreate(testUrl, UriKind.Absolute, out goodUri)) {
    // testUrl == well-formed URI
}

我经常使用Uri类,特别是在我尝试将其提供给SharePoint API for Sites和Web之前。我倾向于需要攻击它,要么为我当前的SP服务器创建相对URL绝对值,要么获取路径的一部分以解析当前站点的相对位置。


为了完整起见,如果您 试图确定某个网址是否在某处解析,您可以创建一个HTTP请求并对其进行测试:

HttpWebRequest req = (HttpWebRequest)WebRequest.Create(goodUri);
HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
if (resp.StatusCode == HttpStatusCode.OK) {
    // Received 200 OK -- probably a valid URL
}
resp.Close();

当然,上面的HTTP示例令人难以置信,天真,简单。可能存在各种响应或要求设置某些请求属性的要求等。有关详细信息,请查看HttpWebRequestHttpWebResponse的文档。