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

从“我的C”应用程序访问WebDAV文件夹时出现401未经授权的错误?

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

    我已经在我的DebianLinux上安装了WebDAV服务器,这个系统工作得很好,因为我可以使用Firefox和IE连接它。

    但是当我试图通过以下代码连接它时,它返回:

    "The remote server returned and error:(401) Unauthorized error"
    

    try
    {
                    // Build the SQL query.
                    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();
    
                }
    

    我无法理解为什么当相同的凭证通过Web浏览器工作时,会发生默认错误。有域,所以我将域字段留空。

    这是身份验证类型吗 NLTM 或者别的什么。请帮忙。

    谢谢,

    亚母鸡

    1 回复  |  直到 15 年前
        1
  •  -1
  •   Community CDub    8 年前