2017-06-08 2 views
1

J'essaie d'envoyer une requête HttpClient PostAsync() au site de partage interne de la société, mais sa réponse est retournée avec une erreur interdite. J'ai toutes les autorisations d'accès nécessaires pour le site à charger et j'ai également passé les en-têtes requis à l'objet HttpClient.L'appel de SharePoint avec des résultats PostAsync() HttpClient dans une réponse interdite

Voici un extrait de code.

HttpClient client = new System.Net.Http.HttpClient (new HttpClientHandler { UseDefaultCredentials = true }); 

client.BaseAddress = new Uri (string.Format (API_URL, p_siteNumber)); 
client.DefaultRequestHeaders.Accept.Add (new MediaTypeWithQualityHeaderValue (@"application/atom+xml")); 
client.DefaultRequestHeaders.TryAddWithoutValidation ("Accept-Encoding", "gzip, deflate"); 
client.DefaultRequestHeaders.TryAddWithoutValidation ("Accept-Language", "en-US, en;q=0.8, hi;q=0.6"); 
client.DefaultRequestHeaders.TryAddWithoutValidation ("User-Agent", "Mozilla/5.0 (Windows NT 6.2; WOW64; rv:19.0) Gecko/20100101 Firefox/19.0"); 
client.DefaultRequestHeaders.TryAddWithoutValidation ("Accept-Charset", "ISO-8859-1"); 

HttpResponseMessage httpResponse = await client.PostAsync (urlHttpPost, new StringContent (string.Empty)); 

string response = await httpResponse.Content.ReadAsStringAsync(); 

me aider Quelqu'un peut-il cela? Merci d'avance.

+0

Nous ne pouvons pas vraiment aider beaucoup basé sur le peu que vous nous avez donné. Il vous manque un en-tête ou une sorte de cookie ou de valeur de publication attendue par le serveur. Je suggère d'utiliser un logiciel tel que Fiddler pour détecter une demande valide et l'appliquer à votre code. – ThePerplexedOne

+0

Si vous faites la même requête avec les mêmes en-têtes et le même contenu depuis https://chrome.google.com/webstore/detail/postman/fhbjgbiflinjbdggehcddcbncddopdop?hl=fr obtenez-vous le même résultat? – mjwills

+1

Quelle URL avez-vous utilisé? Qu'avez-vous essayé de faire? Vous ne pouvez pas accéder à une bibliothèque ou à une liste si votre compte n'est pas autorisé à les utiliser. Avez-vous essayé d'utiliser le [Client Object Model] (https://dev.office.com/sharepoint/docs/sp-add-ins/complete-basic-operations-using-sharepoint-client-library-code)? Commencez par éliminer les problèmes de requête, par exemple les URL incorrectes ou les en-têtes incorrects –

Répondre

1

J'ai rencontré le même problème que je voulais envoyer le fichier et certains contenus de chaînes avec lui. Donc, ci-dessous le code m'a aidé !!

using (var client = new HttpClient()) 
     { 
      //client.DefaultRequestHeaders.Add("User-Agent", "CBS Brightcove API Service"); 
      string authorization = GenerateBase64(); 
      client.DefaultRequestHeaders.Add("Authorization", authorization); 


      using (var content = new MultipartFormDataContent()) 
      { 

       string fileName = Path.GetFileName(textBox1.Text); 

       //Content-Disposition: form-data; name="json" 
       var stringContent = new StringContent(InstancePropertyObject); 
       stringContent.Headers.Remove("Content-Type"); 
       stringContent.Headers.Add("Content-Type", "application/json"); 
       stringContent.Headers.Add("Content-Disposition", "form-data; name=\"instance\""); 
       content.Add(stringContent, "instance"); 

       var fileContent = new ByteArrayContent(filecontent); 
       fileContent.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment") 
       { 
        FileName = fileName 
       }; 
       content.Add(fileContent); 

       var result = client.PostAsync(targetURL, content).Result; 
      } 
     }