Code // 创建新的CredentialCache对象,构建身份凭据 MyCredentialCache =new System.Net.CredentialCache(); MyCredentialCache.Add(new System.Uri(strRootURI), "NTLM", new System.Net.NetworkCredential(strUserName, strPassword, strDomain) ); // Create the HttpWebRequest object. Request = (System.Net.HttpWebRequest)HttpWebRequest.Create(strRootURI); // 指定HttpWebRequest的身份凭据,此处为关键所在。如果使用之前 // 创建的MyCredentialCache,则这个身份凭据是可以从Web服务器传递 // 到Exchange服务器的,但是这样带来的问题也很明显,就是不能够自 // 动获取当前登录到域的用户的身份。即便已经成功登录到域,那也只 // 能通过form再次输入用户名密码。因此,我在这里用的是 // Request.Credentials = CredentialCache.DefaultCredentials, // 这样便可以获得当前用户的凭据,但是这样带来的问题便是上面提到的 // 身份凭据无法传递的问题,解决方法请关注下篇文章。 Request.Credentials = MyCredentialCache; // 指定WebDAV的SEARCH方法 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(); ResponseXmlDoc =new XmlDocument(); ResponseXmlDoc.Load(ResponseStream);