1

J'essaie d'accéder à un fichier dans une liste SharePoint à l'aide de System.Net.WebClient. La liste a un accès anonyme désactivé (lorsque nous l'activons, cela fonctionne) et nous utilisons l'authentification basée sur les revendications. Je sais qu'il existe d'autres moyens d'accéder à un fichier dans une liste SharePoint, mais il s'agit d'un appel que je fais à un service Web Office Web Apps où je dois transmettre l'URL d'un fichier pour générer une image de . Appel du service Web OWA avec cette URL et tentative de téléchargement du fichier directement via WebClient provoquent la même erreur.Obtention de la réponse 403 lors de la tentative d'accès au fichier dans la liste SharePoint via WebClient

L'erreur est 403 interdite, qui, après quelques recherches, je crois que la cause est en quelque sorte liée à l'utilisation de l'authentification basée sur les revendications. J'ai essayé un certain nombre de remèdes suggérés, mais jusqu'ici rien n'a fonctionné. Je peux accéder au fichier et au service Web à l'aide d'un navigateur et cela fonctionne après un défi d'authentification. Si j'échoue intentionnellement le challenge d'authentification, j'obtiens une erreur 401 (pas une 403), donc je ne crois pas qu'il y ait quelque chose qui ne va pas avec les informations d'identification (je suis allé jusqu'à les coder en dur). J'ai essayé d'exécuter le code avec RunWithElevated Privileges, mais cela n'aide pas.

Voici quelques exemples de code:

 
    using (var webClient = new WebClient()) 
    { 
    webClient.UseDefaultCredentials = true; 
    byte[] result = webClient.DownloadData(urlOfFileInList); 
    } 

Toute aide est appréciée!

+0

J'ai le même problème, le résolvez-vous? – nixjojo

Répondre

1

Vous devrez peut-être effectuer la connexion des revendications avec WebClient, voir si vous pouvez l'utiliser comme point de départ.

using (var webClient = new WebClient()) { 
     string url = "http://yoursite"; 
     string result = null; 
     try { 
      result = webClient.DownloadString(url); 
     } catch (Exception ex) { 
      if (ex.ToString().Contains("403")) { 
       result = webClient.DownloadString(url + "/_forms/default.aspx"); 
       string viewstate = result.Substring(result.IndexOf("__VIEWSTATE") + 11); 
       viewstate = viewstate.Substring(viewstate.IndexOf("value=\"") + 7); 
       viewstate = viewstate.Substring(0, viewstate.IndexOf("\"")); 
       string eventvalidation = result.Substring(result.IndexOf("__EVENTVALIDATION") + 17); 
       eventvalidation = eventvalidation.Substring(eventvalidation.IndexOf("value=\"") + 7); 
       eventvalidation = eventvalidation.Substring(0, eventvalidation.IndexOf("\"")); 
       System.Collections.Specialized.NameValueCollection values = new System.Collections.Specialized.NameValueCollection(); 
       values.Add("__EVENTARGUMENT", ""); 
       values.Add("__EVENTTARGET", ""); 
       values.Add("__EVENTVALIDATION", eventvalidation); 
       values.Add("__LASTFOCUS", viewstate); 
       values.Add("__VIEWSTATE", ""); 
       values.Add("ctl00$PlaceHolderMain$signInControl$UserName", ""); 
       values.Add("ctl00$PlaceHolderMain$signInControl$login", "Sign In"); 
       values.Add("ctl00$PlaceHolderMain$signInControl$password", ""); 
       //byte[] data = webClient.UploadValues(url + "/_forms/default.aspx", "POST", values); 
       //result = System.Text.Encoding.Default.GetString(data); 
       //result = webClient.UploadString(url + "/_forms/default.aspx?__EVENTARGUMENT=&__EVENTTARGET=&__EVENTVALIDATION=" + 
       // eventvalidation + "&__LASTFOCUS=&__VIEWSTATE=" + viewstate + 
       // "&ctl00$PlaceHolderMain$signInControl$UserName=&ctl00$PlaceHolderMain$signInControl$login=Sign+In&ctl00$PlaceHolderMain$signInControl$password=", ""); 
       string location = webClient.ResponseHeaders["Location"]; 
       result = webClient.DownloadString(url); 
      } 
     } 
    } 
+0

Ma solution était d'obtenir le contenu du fichier en utilisant SPFile, puis en ajoutant le fichier à une nouvelle liste non protégée, puis d'exécuter Office Web Apps sur la nouvelle copie. Après avoir traité les fichiers, je les efface de la liste non protégée. –

Questions connexes