Impossible de télécharger l'élément de la bibliothèque SharePoint Office 365
Question
J'essaie de télécharger un élément qui existe dans la bibliothèque SharePoint Office 365 à l'aide de WebcClient.DownloadFile()
mais j'obtiens cette exception :
Exception :
The remote server returned an error: (403) Forbidden.
Exemple de code :
NetworkCredential credential = new NetworkCredential("username", "password", "aaa.onmicrosoft.com");
WebClient webClient = new WebClient();
webClient.Credentials = credential;
webClient.DownloadFile(@"https://aaa.sharepoint.com/testDoc/test.pdf", @"c:/test.pdf");
La solution
Avec un peu d'aide de mes amis, j'ai réussi à craquer ces trucs d'authentification en ligne SharePoint :)
J'ai été gentiment dirigé dans la direction de
et mon appel webclient qui utilise le code de bibliothèque de réclamations Wictors ...
var claimsHelper = new MsOnlineClaimsHelper(sharepointOnlineUrl, username, password);
var client = new WebClient();
client.Headers[ "Accept" ] = "/";
client.Headers.Add(HttpRequestHeader.UserAgent, "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)");
client.Headers.Add(HttpRequestHeader.Cookie, claimsHelper.CookieContainer.GetCookieHeader(new Uri(sharepointOnlineUrl)) );
var document = client.DownloadString( documentUrl );
Autres conseils
Une autre option serait d'utiliser SharePointOnlinEcreDentials Class de
SharePointOnLinCredentialS Class représente un objet qui fournit des informations d'identification pour accéder à SharePointRessources en ligne
Prérequis
composants clients en ligne SharePoint SDK
Comment télécharger un fichier de SharePoint Online
public static void DownloadFile(string userName, string password, string fileUrl, string filePath)
{
var securePassword = new SecureString();
foreach (var c in password)
{
securePassword.AppendChar(c);
}
using (var client = new WebClient())
{
client.Credentials = new SharePointOnlineCredentials(userName, securePassword);
client.Headers.Add("X-FORMS_BASED_AUTH_ACCEPTED", "f");
client.DownloadFile(fileUrl, filePath);
}
}
public static void DownloadFile(string userName, string password, string fileUrl, string filePath)
{
var securePassword = new SecureString();
foreach (var c in password)
{
securePassword.AppendChar(c);
}
using (var client = new WebClient())
{
client.Credentials = new SharePointOnlineCredentials(userName, securePassword);
client.Headers.Add("X-FORMS_BASED_AUTH_ACCEPTED", "f");
client.DownloadFile(fileUrl, filePath);
}
}
Vous devez ajouter un peu à vous débarrasser de votre problème, appelé en-têtes et userAgent.
public static void method()
{
// NetworkCredential myCredentials = new NetworkCredential("username", "password", "aaa.onmicrosoft.com");
WebClient w = new WebClient();
var ua = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)";
w.Headers["Accept"] = "/";
w.Headers.Add(HttpRequestHeader.UserAgent, ua);
w.Credentials = myCredentials;
w.DownloadFile(url, @"c:/name.doc");
}
Il télécharge le fichier pour moi de la bibliothèque de Teamsite au bureau 365. Mais cela me donne un fichier téléchargé.Seule le problème que j'ai laissé: le fichier ne contient pas les informations réelles que vous souhaitez télécharger.J'essaie de résoudre ce problème pendant quelques jours maintenant - et c'est le meilleur résultat que je suis arrivé maintenant. Peut-être que vous pourriez m'aider à ce sujet avec cette nouvelle information. Faites-moi savoir s'il vous plaît:)