Reputation: 81262
This is my current function below. Its used to create a folder in a document library in SharePoint but using web dav functionality, which is easier than MOSS stuff.
I need to find a way to determine reliably if the folder already exists... Notice now I am relying on that try catch, but this means that ANY protocol exception will not throw an error, so its not a reliable function. How can I check using web dav if a folder exists?
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;
}
}
}
Essentially I want the unwrapped version of what this product achieves here: http://www.independentsoft.de/webdav/tutorial/exists.html
Upvotes: 1
Views: 9745
Reputation: 41997
PROPFIND is your friend: the DAV:resourcetype property (http://greenbytes.de/tech/webdav/rfc4918.html#rfc.section.15.9) has a DAV:collection child element for collections. Just retrieve it using PROPFIND with DAV:allprop or DAV:prop (both described in http://greenbytes.de/tech/webdav/rfc4918.html#rfc.section.9).
Upvotes: 0
Reputation: 99515
If you do a PROPFIND on the url, you will get a 404 back if the folder does not exist.
Make the PROPFIND look something like this (only showing the relevant headers)
PROPFIND /yourfolder HTTP/1.1
Content-Type: application/xml
<?xml version="1.0"?>
<propfind xmlns="DAV:">
<prop>
<resourcetype />
</prop>
</propfind>
404 means the resource doesn't exist, 207 means it does.
Upvotes: 5