2010-06-28 84 views
0

400错误的请求我有以下PROFIND方法/请求WebDAV服务器:充分利用WebDAV服务器

strQuery = "<?xml version=\"1.0\"?><a:propfind xmlns:a=\"DAV:\">"; 
       strQuery += "<a:prop><a:getcontenttype/></a:prop>"; 
       strQuery += "<a:prop><a:getcontentlength/></a:prop>"; 
       strQuery += "</a:propfind>"; 

       // 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), "Basic", new System.Net.NetworkCredential(strUserName, strPassword));//, strDomain) 

       // Create the HttpWebRequest object. 
       Request = (System.Net.HttpWebRequest)HttpWebRequest.Create(strRootURI); 
       Request.Proxy = GlobalProxySelection.GetEmptyWebProxy(); 

       // Add the network credentials to the request. 
       Request.Credentials = MyCredentialCache; 

       // Specify the method. 
       Request.Method = "PROPFIND"; 

       // 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(); 

查询我从MSDN采取。我在strQuery部分或其他地方做错了什么?

我得到400 - Bad request。请帮忙 。

感谢,

Subhen

回答

1

此外,依赖于前缀名称而不是命名空间名称的代码不太可能与其他服务器一起使用...

+0

如果你详细说明了吗?我对此完全陌生 – Simsons 2010-06-28 15:47:18

+0

元素由名称空间名称和本地名称定义;前缀是一个间接的级别,可能会有所不同。您可能应该阅读XML名称空间常见问题,并仔细查看您正在使用的XML API。 – 2010-06-29 12:51:16

1

虽然我不能完全肯定,但我认为你应该把多个属性在一个单一的而不是多个元素。

+0

请您详细解释一下位。我对这个完全陌生 – Simsons 2010-06-28 15:46:43