获取列表项不返回预期结果



我使用list.asmx(getlistitems方法)创建了一个Windows应用程序,以从另一台服务器上的文档库下载文档。我能够访问文档名称、URL 等。当我使用以下代码下载文件时,它会返回登录页面的 html 作为我尝试下载的每个文件的内容。

有什么想法吗?

            Dim spAuthentication As New Authentication()
            spAuthentication.Url = authenticationWSAddress
            spAuthentication.CookieContainer = New CookieContainer()
            Dim spLists As New Lists()
            spLists.Url = listWSAddress
            'Try to login to SharePoint site with Form based authentication
            Dim loginResult As LoginResult = spAuthentication.Login(userName, password)
            Dim cookie As New Cookie()
            'If login is successfull
            If loginResult.ErrorCode = LoginErrorCode.NoError Then
                'Get the cookie collection from the authenticatin web service
                Dim cookies As CookieCollection = spAuthentication.CookieContainer.GetCookies(New Uri(spAuthentication.Url))
                'Get the specific cookie which contains the security token
                cookie = cookies(loginResult.CookieName)
                'Initialize the cookie container of the list web service
                spLists.CookieContainer = New CookieContainer()
                'set the cookie of list web service to the authenticatio cookie
                spLists.CookieContainer.Add(cookie)
                'Dim responseNode As XmlNode = spLists.GetListCollection()
                'response = responseNode.InnerXml
                Dim query As String = "<mylistitems><Query><Where><Eq><FieldRef Name='FileDirRef' /><Value Type='Url'>DocLib/Property Documents/BELASERA AT FULTON (lax10027)/Master Meter Invoices</Value></Eq></Where></Query><QueryOptions><ViewAttributes Scope='RecursiveAll' IncludeRootFolder='False' /><IncludeAttachmentUrls>TRUE</IncludeAttachmentUrls><ViewFields><FieldRef Name='EncodedAbsUrl'/></ViewFields></QueryOptions></mylistitems>"
                Dim doc As New XmlDocument()
                doc.LoadXml(query)
                Dim dt As DataTable = Nothing
                Dim queryNode As XmlNode = doc.SelectSingleNode("//Query")
                Dim viewNode As XmlNode = doc.SelectSingleNode("//ViewFields")
                Dim optionNode As XmlNode = doc.SelectSingleNode("//QueryOptions")
                Dim retNode As XmlNode = spLists.GetListItems("DocLib", String.Empty, queryNode, viewNode, String.Empty, optionNode, Nothing)
                Dim ds As New DataSet()
                Using sr As New StringReader(retNode.OuterXml)
                    ds.ReadXml(sr)
                End Using
                If ds.Tables("Row") IsNot Nothing AndAlso ds.Tables("Row").Rows.Count > 0 Then
                    dt = ds.Tables("Row").Copy()
                    For Each myrow As DataRow In dt.Rows
                        '  myrow.Item(0) contains url of the document
                        If myrow.Item(0) IsNot Nothing AndAlso myrow.Item(0) <> "" Then
                            DownLoadAttachmentold(myrow.Item("ows_EncodedAbsUrl"), RemoveLookupID(myrow.Item("ows_FileLeafRef")))
                        End If
                    Next
                End If


  Public Shared Sub DownLoadAttachment(ByVal strURL As String, ByVal strFileName As String)
        Dim myWebClient As New WebClient()
        Dim DestinationFolder As String = "C:\DownLoads\"
        Form2.RTBStatus.AppendText("Downloading File " + strFileName + " from " + strURL + " .......")
        ' The DownloadFile() method downloads the Web resource and saves it into the current file-system folder.
        myWebClient.DownloadFile(strURL, DestinationFolder + strFileName)
        'Form2.RTBStatus.AppendText("Successfully Downloaded file ""{0}"" from ""{1}""", "C:\DownLoads\" + strFileName, strURL)
        Form2.RTBStatus.AppendText((ControlChars.Cr + "Downloaded file saved in the following file system folder:" + ControlChars.Cr + ControlChars.Tab + DestinationFolder))
    End Sub

DownloadAttachment 还需要发出(基于表单的)经过身份验证的 HTTP 请求。

下面是 C# 中的一个示例:

request = (HttpWebRequest)WebRequest.Create(strURL);
request.Credentials = System.Net.CredentialCache.DefaultCredentials;//adapt for your FBA
request.AllowWriteStreamBuffering = false;
response = (HttpWebResponse)request.GetResponse();
Stream s = response.GetResponseStream();
FileStream fs = new FileStream(@"C:DownLoads"+strFileName, FileMode.Create);

相关内容

  • 没有找到相关文章

最新更新