В Sharepoint с использованием клиентской объектной модели, как я могу определить, представляет ли URL сайт - PullRequest
1 голос
/ 06 мая 2011

Используя управляемый код, я полагаю, что могу сделать что-то вроде следующего, которое может сказать мне, является ли 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-адрес, который просто недействителен.

Возможно ли это?

1 Ответ

0 голосов
/ 06 мая 2011

Когда вы говорите «URL, который просто недействителен», вы имеете в виду неправильно сформированный URL или правильно сформированный URL, который нигде не разрешается?Я почти уверен, что вы имеете в виду первое.

Если вы просто ищете правильную форму, я предлагаю попробовать разобрать его в Uri объект:

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

Я часто использую класс Uri, особенно перед тем, как пытаться вставить его в API-интерфейс SharePoint для сайтов и веб-сайтов.Мне, как правило, приходится взламывать некоторые из них, либо сделать относительный URL-адрес абсолютным для моего текущего сервера 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 выше невероятно, наивно, прост.Могут быть любые ответы или требования для определенных свойств запроса, которые необходимо установить, и т. Д. Для получения дополнительной информации см. Документацию для HttpWebRequest и HttpWebResponse

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...