WebDAV : How to retrieve list of folders from Exchange Server using Search method (WebDAV) programmatically ?

 using System;
 using System.Net;
 using System.IO;
 using System.Text;
 using System.Xml;
 namespace SampleCode
    class GetFolders
      static void Main(string[] args)
          // Variables.
          System.Net.HttpWebRequest Request;
          System.Net.WebResponse Response;
          System.Net.CredentialCache MyCredentialCache;
          string strRootURI = "http://server/exchange/username/Inbox/"; // Provide the valid URI
          string strUserName = "UserName";
          string strPassword = "Password";
          string strDomain = "Domain";
          string strQuery ="";
          byte[] bytes = null;
          System.IO.Stream RequestStream = null;
          System.IO.Stream ResponseStream = null;
          System.Xml.XmlTextReader XmlReader = null;
             // Build the SQL query.
             strQuery = "<?xml version=\"1.0\"?><D:searchrequest xmlns:D = \"DAV:\" >";
             strQuery += "<D:sql>SELECT \"DAV:href\" FROM scope('hierarchical traversal of \"";
             strQuery += strRootURI + "\"')</D:sql></D:searchrequest>";
             // Create a new CredentialCache object and fill it with the network credentials required to access the server.
             MyCredentialCache = new System.Net.CredentialCache();
             MyCredentialCache.Add( new System.Uri(strRootURI),
                new System.Net.NetworkCredential(strUserName, strPassword, strDomain)
             // Create the HttpWebRequest object.
             Request = (System.Net.HttpWebRequest)HttpWebRequest.Create(strRootURI);
             // Add the network credentials to the request.
             Request.Credentials = MyCredentialCache;
             // Specify the method.
             Request.Method = "SEARCH";
             // Encode the body using UTF-8.
             bytes = Encoding.UTF8.GetBytes((string)strQuery);
             // Set the content header length.  This must be
             // done before writing data to the request stream.
             Request.ContentLength = bytes.Length;
             // Get a reference to the request stream.
             RequestStream = Request.GetRequestStream();
             // Write the SQL query to the request stream.
             RequestStream.Write(bytes, 0, bytes.Length);
             // Close the Stream object to release the connection
             // for further use.
             // Set the content type header.
             Request.ContentType = "text/xml";
             // Send the SEARCH method request and get the
             // response from the server.
             Response = (HttpWebResponse)Request.GetResponse();
             // Get the XML response stream.
             ResponseStream = Response.GetResponseStream();
             // Create the XmlTextReader object from the XML
             // response stream.
             XmlReader = new XmlTextReader(ResponseStream);
             // Read through the XML response, node by node.
                // Look for the opening DAV:href node.  The DAV: namespace is
                //typically assigned the a: prefix in the XML response body.
                if(XmlReader.Name == "a:href")
                   // Advance the reader to the text node.
                   // Display the value of the DAV:href text node.
                   Console.WriteLine("Value: " + XmlReader.Value);
                   //Advance the reader to the closing DAV:href node.
             // Clean up.
          catch(Exception ex)
             // Catch any exceptions. Any error codes from the SEARCH method request

Hope this helps.