Sharepoint 2013-REST-API-Aufruf mit C#
Dies ist ein follow-up-Frage zu einem meine frühere Frage in Stackoverflow.
Ich versuche eine Verbindung zu Sharepoint Online Voraussetzung, um Dokumente im "Dokumenten Bibliothek" mit Hilfe der HTTPClient und die Sharepoint 2013-REST-API.
Alles was ich hier mache ist eine Einfache, Anonyme HTTP-GET-Aufruf mit HttpClient.
Der code ist wie folgt :
System.Net.Http.HttpClient _Client = new System.Net.Http.HttpClient();
_Client.BaseAddress = new Uri("https://test.sharepoint.com/_vti_bin/ListData.svc");
_Client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/atom+xml"));
_Client.DefaultRequestHeaders.Add("auth_user", "[email protected]");
_Client.DefaultRequestHeaders.Add("auth_pass", "test");
_Client.DefaultRequestHeaders.Add("Accept", "application/json;odata=verbose");
HttpResponseMessage resp = _Client.GetAsync(new Uri("https://test.sharepoint.com/_vti_bin/ListData.svc/Documents()")).Result;
string respString = resp.Content.ReadAsStringAsync().Result;
Und ich erhalte die folgende Fehlermeldung:
Nicht zum Lesen von Daten aus dem transport-Verbindung: Die Verbindung wurde geschlossen.
Stack-Trace ist wie folgt :
[IOException: Unable to read data from the transport connection: The connection was closed.]
System.Net.ConnectStream.EndRead(IAsyncResult asyncResult) +6501654
System.Net.Http.WebExceptionWrapperStream.EndRead(IAsyncResult asyncResult) +30
System.Net.Http.StreamToStreamCopy.BufferReadCallback(IAsyncResult ar) +54
[HttpRequestException: Error while copying content to a stream.]
[AggregateException: One or more errors occurred.]
System.Threading.Tasks.Task.ThrowIfExceptional(Boolean includeTaskCanceledExceptions) +3569193
System.Threading.Tasks.Task`1.GetResultCore(Boolean waitCompletionNotification) +73
System.Threading.Tasks.Task`1.get_Result() +10522673
WebApp.Test.Page_Load(Object sender, EventArgs e) in @Location
System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) +51
System.Web.UI.Control.OnLoad(EventArgs e) +92
System.Web.UI.Control.LoadRecursive() +54
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +772
Ich gegangen durch verschiedene blogs/Artikel zu bekommen, irgendeine Idee um das Problem zu lösen.Aber ich cudn keine Lösung.
Irgendwelche Gedanken zu dieser?
- Tun Sie dies innerhalb eines ASP.NET web-site? Ich vermute, etwas seltsam ist Los mit Ihr .Das Ergebnis nennen. Haben Sie versucht, mit async/await ?
- Ja,ich Tue dies aus einem ASP.NET website.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies wird Ihnen helfen:
Legte es vor
request
.Ich zusammen eine schnelle .NET 4.5-Konsole app in Visual Studio 2013 und war in der Lage, Ihre code-arbeiten mit ein paar kleine änderungen und bin in der Lage, erfolgreich zu authentifizieren, und rufen Sie die SharePoint Online-REST-API.
Ändern #1: ich fügte Projekt Verweise auf die beiden SharePoint 2013-Client-Side Object Model (CSOM) DLLs. Sie können installieren Sie die DLLs von hier: http://www.microsoft.com/en-us/download/details.aspx?id=35585. Den installer ausführen und hinzufügen von Referenzen zu Microsoft.SharePoint.Client.dll und Microsoft.SharePoint.Client.Runtime.dll. Der Grund müssen Sie die ist so können Sie die SharePointOnlineCredentials Klasse.
Ändern #2: ich fügte hinzu, die "warten" - Schlüsselwort, um Ihre zwei asynchrone Aufrufe, weil der code war eigentlich nicht warten, für diejenigen, die Anrufe zu führen.
Ändern #3: ich veränderte die HttpClient-code (1) verwenden Sie die Anmeldeinformationen aus SharePointOnlineCredentials Objekt, (2) Erhalten, und verwenden Sie ein Authentifizierungs-cookie von SharePoint Online, und (3) fügen Sie einen zusätzlichen request-header, die benötigt wird.
Hier ist der komplette code-snippet:
Ich diese lief und ausgedruckt werden die "text" variable am Ende und bekam eine gültige Antwort von SharePoint Online.
Dem Weg Sie versuchen, die übergabe von Anmeldeinformationen ist nicht in SharePoint Online unterstützt.
Microsoft veröffentlicht SharePointOnline Client Components SDK enthält SharePointOnlineCredentials Klasse, die Anmeldeinformationen für den Zugriff auf SharePoint Online-Ressourcen.
Im folgenden Beispiel wird veranschaulicht, wie die leverage SharePointOnlineCredentials Klasse mit HttpClient-Klasse, um Zugriff auf SharePoint Online:
Kern: SPHttpClientHandler.cs
Nutzung