2016-05-17 5 views
1

Ich habe ein seltsames Problem beim Zugriff auf ein Miniaturbild, das auf O365-Video über C# gespeichert ist. Ich kann auf die REST-API ohne Problem überhaupt zugreifen, ich füge nur die Authentication: Bearer <token> in die Kopfzeile und ich bin aus einem laufenden. Das Problem ist mit einer grundlegenden Bild-URL, die ich von einem bestimmten Video zurückbekomme.Problem beim Herunterladen eines Miniaturbilds in O365 Video mit C#

Wenn ich auf diese URL von einem Browser aus zugreife, funktioniert es 100% der Zeit. Wenn ich versuche, über das Objekt httpclient darauf zuzugreifen, erhalte ich einen Fehler 401 Unauthorized.

Das Beste, was ich feststellen kann, ist, dass das Berechtigungs-Header-Token beim Zugriff auf eine Basis-URL nicht berücksichtigt wird. Was bringt mich dazu, dass ich etwas anderes brauche wie einen Keks? Aber ich kann nicht herausfinden, welches. Suchen Sie nach einem Ratschlag :)

Antwort

1

Übergeben Sie stattdessen Anmeldeinformationen und ja, Sie benötigen ein Authentifizierungs-Cookie. Hier ist ein Beispiel:

private static async Task<string>getWebTitle(string webUrl) 
{ 
//Creating Password 
const string PWD = "softjam.1"; 
const string USER = "[email protected]"; 
const string RESTURL = "{0}/_api/web?$select=Title"; 

//Creating Credentials 
var passWord = new SecureString(); 
foreach (var c in PWD) passWord.AppendChar(c); 
var credential = new SharePointOnlineCredentials(USER, passWord); 

//Creating Handler to allows the client to use credentials and cookie 
using (var handler = new HttpClientHandler() { Credentials = credential }) 
{ 
    //Getting authentication cookies 
    Uri uri = new Uri(webUrl); 
    handler.CookieContainer.SetCookies(uri, credential.GetAuthenticationCookie(uri)); 

    //Invoking REST API 
    using (var client = new HttpClient(handler)) 
    { 
     client.DefaultRequestHeaders.Accept.Clear(); 
     client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); 

     HttpResponseMessage response = await client.GetAsync(string.Format(RESTURL, webUrl)).ConfigureAwait(false); 
     response.EnsureSuccessStatusCode(); 

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

     return jsonData; 
    } 
} 

}

+1

Dank! Ich verfüge jedoch nicht über die Anmeldeinformationen, da ich das O365 oAuth- und Federation-Modell (unter Verwendung der O365-Anmeldeseite) verwende. Ich denke, ich brauche eine Möglichkeit, ein OAuth-Token zu nehmen und es in ein FedAuth-Cookie zu konvertieren. – Shawn