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は下記のような感じです。
