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

正在从WebDav服务器获取400个错误请求

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

    我对WebDav服务器有以下PROFIND方法/请求:

     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 . 请帮忙。

    谢谢,

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

    另外,依赖前缀名而不是命名空间名的代码不太可能与其他服务器一起工作。。。

        2
  •  1
  •   Evert    15 年前

    虽然我不完全确定,但我认为应该在一个元素中放置多个属性,而不是多个元素。