WebDav как проверить, существует ли папка? - PullRequest
1 голос
/ 22 декабря 2009

Это моя текущая функция ниже. Он используется для создания папки в библиотеке документов в SharePoint, но с использованием функциональности web-dav, которая проще, чем MOSS.

Мне нужно найти способ, чтобы надежно определить, существует ли папка ... Обратите внимание, что теперь я полагаюсь на эту попытку catch, но это означает, что ЛЮБОЕ исключение протокола не вызовет ошибку, поэтому это ненадежная функция. Как я могу проверить с помощью веб-Дав, если папка существует?

private void createFolderUsingWebDav(string siteAddress, string listAddress, string folderName)
        {
            //Check Databox Folder Exists
            string folderAddress = siteAddress + @"/" + listAddress + @"/" + folderName; 
            HttpWebResponse response;
            try
            {
                HttpWebRequest request = (System.Net.HttpWebRequest)HttpWebRequest.Create(folderAddress);
                request.Credentials = wsLists.Credentials; // CredentialCache.DefaultCredentials;
                request.Method = "MKCOL";
                response = (System.Net.HttpWebResponse)request.GetResponse();
                response.Close();
            }
            catch (WebException ex)
            {
                if (ex.Status != WebExceptionStatus.ProtocolError)
                {
                    throw ex;
                }
            }
        }

По сути, я хочу развернутую версию того, что этот продукт достигает здесь: http://www.independentsoft.de/webdav/tutorial/exists.html

Ответы [ 2 ]

4 голосов
/ 23 декабря 2009

Если вы сделаете PROPFIND для URL, вы получите 404, если папка не существует.

Сделайте так, чтобы PROPFIND выглядел примерно так (показаны только соответствующие заголовки)

PROPFIND /yourfolder HTTP/1.1
Content-Type: application/xml

<?xml version="1.0"?>
<propfind xmlns="DAV:">
   <prop>
      <resourcetype />
   </prop>
</propfind>

404 означает, что ресурс не существует, 207 означает, что он существует.

0 голосов
/ 22 декабря 2009

PROPFIND - ваш друг: свойство DAV: resourcetype (http://greenbytes.de/tech/webdav/rfc4918.html#rfc.section.15.9) имеет дочерний элемент DAV: collection для коллекций. Просто извлеките его, используя PROPFIND с DAV: allprop или DAV: prop (оба описаны в http://greenbytes.de/tech/webdav/rfc4918.html#rfc.section.9).

...