IIS7.5 の WebDAVサーバーで、指定したフォルダにあるリソース(フォルダやファイル)の一覧を取得します。

HttpWebRequest.Method で "PROPFIND"を指定し、HttpWebRequestのHeadersに "Depth"(値は"1")を追加して接続し、ResponseStream を XmlReaderで取得しています。

sing System;
using System.IO;
using System.Net;
using System.Linq;
using System.Xml;
using System.Xml.Linq;

namespace WebDAV
{
    public class Program
    {
        static void Main(string[] args)
        {
            string uri = "一覧を取得するURI";
            HttpWebRequest webReq = (HttpWebRequest)HttpWebRequest.Create(uri);
            webReq.Method = "PROPFIND";

            // リソースおよびその直下のリソースを取得するので「1」を指定
            webReq.Headers.Add("Depth", "1");
            webReq.Credentials = new NetworkCredential("ユーザー名", "パスワード");

            HttpWebResponse res = (HttpWebResponse)webReq.GetResponse();

            // 結果ステータス取得 
            Console.WriteLine("Status Code: {0}", res.StatusCode);
            Console.WriteLine("");

            // リソースのフルパスを取得(指定したフォルダは除く)
            Stream strm = res.GetResponseStream();
            XmlReader xmlReader = XmlReader.Create(strm);
            var els = XElement.Load(xmlReader);

            var query = from x in els.Elements()
                        where x.Element("{DAV:}href").Value != uri
                        select new
                        {
                            href = x.Element("{DAV:}href").Value
                        };
            foreach (var item in query)
            {
                Console.WriteLine(item.href);
            }

            res.Close();
            strm.Close();

            Console.ReadLine();
        }
    }
}

 

ちなみに、返ってくるXMLは下記のような感じです。

xml

Add comment




  Country flag

biuquote
  • Comment
  • Preview
Loading