Search code examples
c#sharepointoffice365tokenhttpwebrequest

Download version file of SharePoint office 365


I tried to download previous version files of SharePoint using c#. I have used This article as reference. The link is working file with chrome. Now when I tried the URL on c# to download the file part by part, it is giving me The remote server returned an error: (401) Unauthorized. error.

I have even provided access token using to header of the function.

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri);
            WebHeaderCollection header = new WebHeaderCollection();
            request.Headers.Add(System.Net.HttpRequestHeader.Authorization, $"Bearer {token}");
            request.Headers.Add("X-FORMS_BASED_AUTH_ACCEPTED", "f");

Here, uri is similar to the address: http://yoursite/yoursubsite/_vti_history/512/Documents/Book1.xlsx

How can I download the previous version file using c#?


Solution

  • Here is my test code for your reference.

    var login = "user@xxx.onmicrosoft.com";
                var password = "Password";
    
                var securePassword = new SecureString();
    
                foreach (char c in password)
                {
                    securePassword.AppendChar(c);
                }
                SharePointOnlineCredentials onlineCredentials = new SharePointOnlineCredentials(login, securePassword);
    
                string webUrl = "https://xxx.sharepoint.com/sites/lee";
                string requestUrl = "https://xxx.sharepoint.com/sites/lee/_vti_history/512/MyDoc2/testdata.xlsx";
                Uri uri = new Uri(requestUrl);
                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri);
                request.Method = "GET";
                request.Credentials = onlineCredentials;
                request.Headers[HttpRequestHeader.Cookie] = onlineCredentials.GetAuthenticationCookie(new Uri(webUrl), true);  // SPO requires cookie authentication
                request.Headers["X-FORMS_BASED_AUTH_ACCEPTED"] = "f";  // disable interactive forms-based auth            
                HttpWebResponse response = (HttpWebResponse)request.GetResponse();
                Stream stream = response.GetResponseStream();