2011-05-05 41 views
1

使用託管代碼,我相信我可以做下面的事情,這兩個都可以告訴我,如果URL是有效的,如果是這樣,如果它代表一個網站。在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是否代表網站。但我也希望能夠區分有效但不代表站點的URL和無效的URL。

這可能嗎?

回答

0

當你說「一個無效的URL」時,你的意思是一個格式不正確的URL,或者是一個不能正確解析的URL?我很確定你的意思是前者。

如果你只是在尋找良好性,我建議試圖把它解析爲Uri對象:

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

我使用Uri類很多,尤其是在我嘗試將其送入網站和網站的SharePoint API。我傾向於需要對其進行一些破解,或者爲我的當前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的文檔以獲取更多信息。

相關問題