代码之家  ›  专栏  ›  技术社区  ›  Simsons

如何获取LinuxWebDAV上部署的文件夹和文件列表?

  •  0
  • Simsons  · 技术社区  · 15 年前

    我已经在DebianLinux上部署了WebDAV服务器,并给予了适当的权限。

    当我试图访问列表时( SEARCH )文件夹中有个文件夹通过以下代码获得以下错误:

    The remote server returned an error: (405) Method Not Allowed.
    

    使用的代码是:

    try{
        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),
                           "NTLM",
                           new System.Net.NetworkCredential(strUserName, strPassword)
                           );
    
                        // 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.
                        RequestStream.Close();
    
                        // 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.
                        while (XmlReader.Read())
                        {
                            // 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.
                                XmlReader.Read();
    
                                // Display the value of the DAV:href text node.
                                Console.WriteLine("Value: " + XmlReader.Value);
                                Console.WriteLine("");
    
                                //Advance the reader to the closing DAV:href node.
                                XmlReader.Read();
                            }
                        }
    
                        // Clean up.
                        XmlReader.Close();
                        ResponseStream.Close();
                        Response.Close();
    }
    

    我从 http://msdn.microsoft.com/en-us/library/ms992615(EXCHG.65).aspx

    1 回复  |  直到 15 年前
        1
  •  1
  •   Julian Reschke    15 年前

    搜索仅受少数服务器支持,而且d:sql语法是一项Microsoft发明,仅在 一些 Microsoft服务器。

    你真正想要的是PropFind( RFC 4918, Section 9.1 )

    推荐文章