Februar 2016

Band 31, Nummer 2

Dieser Artikel wurde maschinell übersetzt.

Windows 10 – Implementieren einer UWP-App mit dem offiziellen OneDrive SDK

Durch Laurent Bugnion | Februar 2016

In Teil 1 dieser zweiteiligen Reihe (msdn.com/magazine/mt614268), kann ich mithilfe der OneDrive-APIs über HTTP direkt aus einer app universelle Windows-Plattform (UWP) gesprochen, mithilfe der HTTP-Client, um die Aufrufe zu platzieren. Ich erhielt die Wahrscheinlichkeit sehr tief in die Grundlagen der REST gehen und sehen, wie eine moderne Programmierverfahren wie das Async/await-Schlüsselwörtern und die HttpClient-Bibliothek, Aufrufe moderne Web-APIs nutzen kann. Ich wurde gezeigt, wie Authentifizierungsmechanismus mit dem OAuth-Protokoll funktioniert, wodurch einen Benutzer seine Anmeldeinformationen in einer gehosteten Webseite eingeben, sodass die Kommunikation zwischen dem Benutzer und der Anmeldeinformationsdienst für die Hostinganwendung vollständig transparent ist. Kann ich implementiert diese mithilfe von in einer XAML-Seite gehosteten WebView.

Implementieren der Authentifizierung und die REST-Aufrufe nicht sehr schwierig, aber es funktioniert, ist, insbesondere, wenn Sie die Bibliothek über die neuesten Änderungen und Ergänzungen beibehalten möchten. Daher ist Microsoft das SDK OneDrive veröffentlicht hat, in dem Sie Ihre Anwendung auf einfache Weise (mit dem NuGet Package Manager) hinzufügen können. Dies ist eine sehr nützliche Komponente, und die "true" "neue Microsoft" Art und Weise, die Bibliothek ist geöffnet, erstellt und veröffentlicht auf GitHub unter bit.ly/1WX0Y03.

Zur Veranschaulichung dieses Artikels ein vollständiges Beispiel finden Sie unter 1drv.ms/1ObySnz.

Authentifizierung mit dem neuen SDK

Einer der größten Unterschiede zwischen der vorherigen Artikel und das offizielle SDK beschriebenen "Low-Level" Implementierung ist der Authentifizierungsmechanismus. Zuvor ich OAuth manuell implementiert und mussten Teile erstellen, die zusammen mussten:

  • Eine Webansicht den Benutzer eine Webseite, die von der Microsoft-Authentifizierungsdienst gesendet zur Verfügung stellen, damit der Benutzername und Kennwort ohne Berücksichtigung der Anwendung direkt an den Dienst gesendet werden.
  • Eine XAML-Seite Hosten der WebView und darauf warten, analysiert das Authentifizierungstoken, die vom Dienst zurückgegeben wird, wenn der Vorgang erfolgreich war.
  • Ein Client-seitige Authentifizierung-Dienst, der ist verantwortlich für die Entscheidung, ob das Authentifizierungstoken verfügbar und gültig ist und der Authentifizierungsseite angezeigt, wenn dies nicht der Fall ist.

Das neue SDK vereinfacht dies, für den Entwickler und für den Benutzer.

Authentifizierung für Entwickler

Für den Entwickler ist der Authentifizierungsprozess jetzt fast zu einfach. Der gesamte Workflow wird durch das SDK behandelt. Im Hintergrund verwendet das SDK noch besser, eine Funktion von Windows Store-apps, die mit dem Namen der OnlineIdAuthenticator. Diese Klasse behandelt das Authentifizierungsverfahren auf Betriebssystemebene und beseitigt die Notwendigkeit, das Authentifizierungstoken zu analysieren.

Zusätzlich zu OnlineIdAuthenticator unterstützt das OneDrive-SDK für Windows 10 auch die WebAuthenticationBroker-Klasse, die bietet mehr "klassischen" durch Eingabe von Benutzername und Kennwort anmelden, aber auch der Analyse des Authentifizierungstokens und alle Dialogfelder mit dem Dienst übernimmt. Sehen Sie Beispiele für diese beiden Authentifizierungsmodi in diesem Artikel.

Authentifizierung für den Benutzer

Der Hauptvorteil ist für den Endbenutzer in OnlineIdAuthenticator nutzen angemeldeten Windows Anmeldeinformationen des Benutzers, die bereits auf der Betriebssystemebene verfügbar sind. Wenn der Windows-Benutzer in der OneDrive-Konto zugeordnet sein Windows-Konto (was häufig der Fall ist) protokolliert wird, muss er auch seinen Benutzernamen und sein Kennwort erneut eingeben. Der gesamte Authentifizierungsmechanismus ist für ihn transparent.

Hinweis: Zusätzlich zu Microsoft Konten (MSA) für den Verbraucher, z. B. Outlook.com, Live.com oder Hotmail.com-Adressen unterstützt das OneDrive SDK auch Azure Active Directory (Azure AD) für Geschäftsbenutzer. Dies ist ideal für Unternehmen, deren Benutzer auf diese Weise verwaltet werden. MSA ist für Microsoft .NET Framework 4.5.1 (z. B. Windows Presentation Foundation- oder Windows Forms), Windows Store und Windows Phone-Apps verfügbar. Azure AD ist für Windows Forms, Windows Store 8.1 und UWP-apps verfügbar.

Zuordnen einer neuen UWP-App im Windows Store

Für die OnlineIdAuthenticator arbeiten ist es erforderlich, um die neue Anwendung mit dem Windows Store zu registrieren. Beachten Sie, dass Sie benötigen, um Ihre app im Windows Store mit dem OneDrive SDK zu übermitteln. Die Registrierung wird eine eindeutige IDs für Ihre Anwendung erstellt, die in das Anwendungsmanifest (Package.appxmanifest) eingegeben werden muss. Wenn Benutzer versuchen, sich an den OneDrive-Dienst zu authentifizieren, werden diese IDs zur eindeutigen Identifizierung die Anwendung verwendet. Der Vorgang der Registrierung Ihrer Anwendung mit dem Windows Store ersetzt, die Client-ID, die Sie zuvor im OneDrive Developer Center erhalten wurden.

Um Ihre Anwendung mit dem Windows Store zu registrieren, müssen Sie fahren Sie mit der Windows-Entwicklungscenter unter dev.windows.com und melden Sie sich mit Ihrem Windows-Entwickler-Konto auf das Dashboard zugreifen. Je nach Ihrem Status müssen Sie möglicherweise für das Konto zu registrieren und Bereitstellen von Zahlungsinformationen.

Suchen Sie nach der Anmeldung auf dem Dashboard für den Link "App übermitteln". Dies finden Sie eine Übersicht die Übersichtsseite, sehen Sie vorhandene apps und senden dem neuen Namen, der erste Windows Store registriert. Erstellen einer neuen Windows Store-app benötigt einen eindeutigen app-Namen, die Sie eingeben werden nach dem Klicken auf die Schaltfläche neue app erstellen. Klicken Sie dann auf die Verfügbarkeit sicherstellen, dass die app-Namen, den Sie ausgewählt haben, tatsächlich eindeutig ist. Da die von Ihnen gewählten Namen reserviert wird, ist es empfiehlt sich, temporäre Namen für die testanwendungen verwenden, die nicht veröffentlicht werden. Auf diese Weise vermeiden Sie Anwendungsname ein anderer Entwickler zu blockieren. Stellen Sie außerdem sicher, dass Sie die Zugriffsrechte für besitzen, für das Sie zur Vermeidung von Klagen eine Marke Besitzer reserviert sind. Beachten Sie, dass wenn Sie die Anwendung innerhalb eines Jahres übermitteln, die Namen Reservierung verloren. Das Beispiel reserviert ich den Namen TestOneDriveSdk_001, die aufgetreten, zur Verfügung stehen sind.

Implementieren und Testen der Authentifizierungs

Jetzt ist die Zeit, um die Anwendung zu erstellen und die OneDrive-SDK hinzufügen. Mithilfe von Visual Studio erstellen Sie zunächst eine neue UWP-Anwendung für Windows 10. Die Anwendung nicht den gleichen Namen wie die verfügen, die Sie im Windows Store reserviert, aber es wird empfohlen, den gleichen Namen verwenden.

Nachdem die Anwendung erstellt wurde, öffnen Sie die NuGet-Paket-Manager mit der rechten Maustaste auf das Projekt im Projektmappen-Explorer, und wählen NuGet-Pakete verwalten aus dem Kontextmenü. Klicken Sie auf Durchsuchen, zusätzlich zu den Paket-Manager, Suchen nach dem Microsoft.OneDriveSDK-Paket, und der Anwendung hinzufügen.

Nun fügen Sie die Authentifizierung an die Anwendung die folgenden Schritte aus:

  • Öffnen Sie "MainPage.xaml", und fügen Sie eine Schaltfläche auf der Seite, und nennen Sie sie AuthenticateButton.
  • Implementieren Sie den Click-Ereignishandler in "MainPage.Xaml.cs", siehe Abbildung 1.

Abbildung 1 den Click-Ereignishandler implementieren

private IOneDriveClient _client;
public MainPage()
{
  InitializeComponent();
  AuthenticateButton.Click += async (s, e) =>
  {
    var scopes = new[]
    {
      "onedrive.readwrite",
      "onedrive.appfolder",
      "wl.signin"
    };
    _client = OneDriveClientExtensions.GetClientUsingOnlineIdAuthenticator(
      _scopes);
    var session = await client.AuthenticateAsync();
    Debug.WriteLine($"Token: {session.AccessToken}");
  };
}

Im Code in Abbildung 1, erkennen Sie Bereiche, die Sie bereits in der vorherigen Artikel Beispiel verwendet. Diese werden Sie mit Lese-/Schreibzugriff auf die Dateien als auch Ordner für die Anwendung bereitstellen. Zur Erinnerung: Dieser besondere Ordner ist im Ordner "Apps" direkt unter dem Stammverzeichnis erstellt und wird den gleichen Namen wie die Anwendung auszuführen. Dies ist ein guter Speicherort für Roamingeinstellungen, online-Dokumente und so weiter.

Vor dem Ausführen der Anwendung zum Testen müssen Sie dennoch den Windows Store-Namen zuordnen, die Sie zuvor reserviert. Gehen Sie dazu folgendermaßen vor:

  • Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf das Projekt, und wählen Sie Store/Associate App Store. Dies ist, was Sie tun, bevor Sie eine UWP-app im Windows Store veröffentlichen. In diesem Fall ist es sehr früh in der Entwicklung ausgeführt, da die generierten Informationen erforderlich ist.
  • Klicken Sie im Dialogfeld Zuordnen Ihrer Anwendung im Windows Store, klicken Sie auf Weiter, und melden Sie sich dann in den Speicher. Stellen Sie sicher, dass die gleichen Anmeldeinformationen verwenden, mit dem Namen reserviert.
  • Nach der Anmeldung sehen Sie den Namen der Anwendung, den Sie reserviert. Beachten Sie, dass Sie einen Namen direkt in diesem Dialogfeld auch reservieren können, wenn Sie die Web-basierten Dashboard verwenden möchten.
  • Wählen Sie den Namen ein, und klicken Sie auf Weiter, und klicken Sie dann auf zuordnen.

Sie können nun den Authentifizierungsmechanismus zu testen. Führen Sie die Anwendung im Debugmodus aus, und klicken Sie auf die Schaltfläche "authentifizieren". Zusätzlich zu Ihrer app zu Fragen sollte ein Dialogfeld angezeigt werden. Beachten Sie jedoch, dass Sie nicht Ihre Microsoft-Anmeldeinformationen eingeben müssen. Stattdessen werden automatisch die Windows-Anmeldeinformationen verwendet.

Nach der Ausführung des Codes in Abbildung 1, sehen Sie die SessionToken (Authentifizierungstokens) im Ausgabefenster angezeigt. Sie werden dieses Token in nachfolgenden API-Aufrufe wie im ersten Artikel verwenden. Wenn Sie die Anwendung später erneut ausführen, drücken Sie erneut authentifizieren, müssen Sie wahrscheinlich auch nicht erneut zu bestätigen, da Ihre Zustimmung zwischengespeichert, bis Sie sich abmelden. Dies bietet eine nahtlose Anmeldung für den Benutzer.

Warum können wir keine Konten wechseln?

Im Beispiel in Abbildung 1 verwendet das SDK GetClientUsingOnlineIdAuthenticator-Erweiterungsmethode, die im Hintergrund die OnlineIdAuthenticator-Klasse verwendet. Wie bereits erläutert wurde, verwendet dieses Objekt Anmeldeinformationen des angemeldeten Benutzers, wodurch die Anmeldung extrem einfach für die große Mehrheit der Benutzer auftreten.

Der Nachteil dieses Ansatzes ist jedoch, dass es keine Möglichkeit gibt, ein anderes Konto auswählen, wenn Sie beim Anmelden. Diese Authentifizierungsmethode ist ideal für Benutzer, die nur ein OneDrive-Konto, die ihren Microsoft-Konten zugeordnet haben. Aber für Poweruser, die mehr als ein OneDrive-Konto haben, die OnlineIdAuthenticator zu begrenzt sein. Glücklicherweise können Sie einer anderen Methode ganz einfach wechseln.

Verwenden eine webauthenticationbroker-Klasse

Wenn der Benutzer muss seine Anmeldeinformationen explizit (z. B. können Sie ihn in ein anderes Konto als das zu wechseln, die er bei Windows mit angemeldet) anzumelden, ist es besser, die WebAuthenticationBroker-Klasse zu verwenden. Hier auch die OneDrive-SDK wird der Komplexität ausblenden und können Sie den folgenden Code zum Erstellen des OneDrive-Clients:

var client = OneDriveClientExtensions.GetClientUsingWebAuthenticationBroker(
  "[CLIENT ID]",
  _scopes);

In dem Code in Abbildung 1, die [CLIENT-ID] Zeichenfolge mit Client-ID für Ihre Anwendungsverzeichnis ersetzt werden muss. Zur Erinnerung: ist dies eine eindeutige ID, die Sie im Windows Developer Center in Ihrer Anwendung Details abrufen können.

Wenn Sie diese geringfügige Änderung die Anwendung ausführen, sehen Sie jetzt ein anderes Dialogfeld. In diesem Dialogfeld kann Benutzer zu einem anderen Konto wechseln, in dem in Ordnung ist. Allerdings muss der Benutzer sein Kennwort manuell eingeben die ist kleiner als der vorherige Workflow nahtlos. Wie üblich, Engineering, sie entscheiden, ob Sie am besten wählen Sie die Methode mit dem Anwendungsfall eignet sich zu lösen.

Mithilfe des SDK zum Zugriff auf Ordner und Dateien

Nachdem der Client authentifiziert und verfügbar ist, bietet das SDK OneDrive werden verschiedene Methoden zum Abrufen von Informationen zu Laufwerk, Ordner und Dateien. Im vorherigen Artikel haben Sie gesehen, wie die Struktur der Elemente, Ordner, Dateien, Audio, Bilder, Fotos und Videos zusammengesetzt ist. Bis jetzt haben Sie eine JSON-Antwort vom Dienst abrufen und deserialisiert sie manuell in den entsprechenden C#-Klassen wurde. Mit dem OneDrive-SDK ist dies nicht mehr erforderlich, da sie diesen Schritt für Sie erledigen muss. Um dies zu veranschaulichen, werde ich dieselbe beispielanwendung wie im vorherigen Artikel stattdessen verwenden das offizielle SDK überarbeiten.

Erstellen von Anforderungen

Senden von Anfragen an die OneDrive-REST-API "Anforderung SDK verwendet, die so genannte eine Objekthierarchie aus Generatoren." Abrufen von dem Laufwerk des Benutzers wird z. B. mit _client ausgeführt. Das Laufwerk und seine Stammordner erste erfolgt über _client. Drive.Root. Die am häufigsten verwendeten Anforderung Generatoren werden später in diesem Artikel aufgeführt.

Es gibt natürlich viele mögliche Kombinationen. Nach ein Anforderung-Generator abgerufen wurde, wird die tatsächliche Anforderung mithilfe der Methode für die Anforderung erstellt und gesendet mit einer der HTTP-Methoden, z. B. GetAsync oder "postasync". Zum Beispiel den Code in Abbildung 2erhalten die Metainformationen für die Datei unter dem Pfad Public/Test/MyFile.txt und dessen Inhalt als Stream.

Abbildung 2 Downloaden einer Textdatei den Inhalt

var builder = _client.Drive.Root
  .ItemWithPath("Public/Test/MyFile.txt");
var file = await builder
  .Request()
  .GetAsync();
var contentStream = await builder.Content
  .Request()
  .GetAsync();
Debug.WriteLine($"Content for file {file.Name}:");
using (var reader = new StreamReader(contentStream))
{
  Debug.WriteLine(reader.ReadToEnd());
}

Nur einige der häufigsten Anforderungen auflisten

Die häufigsten Anforderungen aufgeführt werden hier als Anforderung-Builder:

  • _client. Laufwerk: Erstellt eine Anforderung zum Zugriff auf das OneDrive selbst und dessen Eigenschaften (IDriveRequestBuilder). Wenn Sie mehrere Laufwerke verfügen, können Sie auch _client. Laufwerke, die eine IDrivesCollectionRequestBuilder ist.
  • _client. Drive.Root: Erstellt eine Anforderung an die OneDrive-Stammordner (IItemRequestBuilder) zugreifen.
  • _client. Drive.Root.Children: Erstellt eine Anforderung an den Stamm des Ordners untergeordneten Elemente (IChildrenCollectionRequestBuilder) abgerufen. Nach dem Ausführen die Anforderung (mit Request(). GetAsync()), ist das Ergebnis einer IChildrenCollectionPage, die eine Eigenschaft namens NextPageRequest enthält. Wenn die Anzahl der Kinder zu groß war, kann die NextPageRequest-Eigenschaft auf die nächste Seite von Elementen verwendet werden.
  • _client. Drive.Root.ItemWithPath("Public/Test"): Erstellt eine Anforderung zum Abrufen des Elements unter dem Pfad Public/Test in das Stammverzeichnis (IItemRequestBuilder).
  • _client. Drive.Root.ItemWithPath("Public/Test/MyFile.txt"). Inhalt: Erstellen Sie eine Anforderung zum Abrufen des Inhalts der Datei MyFile.txt (IItemContentRequestBuilder).
  • _client. Drive.Special.AppRoot: Erstellt eine Anforderung zum Zugriff auf den Ordner der Anwendung (IItemRequestBuilder).
  • _client. Drive.Items[SomeId]: Erstellt eine Anforderung für ein Element-ID

Jede dieser Anforderung Generatoren kann in Aktion im Beispiel zur Veranschaulichung dieses Artikels angezeigt werden.

Hochladen einer Datei

Der Inhalt einer Datei hochladen geschieht bei einer PUT-Anforderung gemäß den Grundsätzen der REST-APIs. Abgesehen von dieser Unterschied ist der Mechanismus zum Erstellen einer PUT-Anforderung ähnelt dem GET-Anforderungen, die zuvor verwendet. Tatsächlich die meiste Arbeit erforderlich ist, um den Stream zu erhalten. Beispielsweise kann in einer app UWP dies mit einem FileOpenPicker erfolgen laden die ausgewählte Datei aus dem Windows-Dateisystem. Der Code in Abbildung 3 zeigt ein einfaches Beispiel (ohne Fehlerbehandlung) die ausgewählte Datei hochladen, in den Anwendungsordner. Ein ausführlicheres Beispiel finden Sie im Codedownload. In diesem Beispiel müssen Sie Zugriff auf die Meta-Informationen, die von der PutAsync-Methode zurückgegeben und die Element-ID speichern, sodass Sie problemlos die gespeicherte Element später zugreifen können. beispielsweise um eine Verknüpfung zu diesem Element abzurufen.

Abbildung 3 auswählen und Hochladen einer Datei den Inhalt

var picker = new FileOpenPicker
{
  SuggestedStartLocation = PickerLocationId.DocumentsLibrary
};
picker.FileTypeFilter.Add("*");
var file = await picker.PickSingleFileAsync();
using (var stream = await file.OpenStreamForReadAsync())
{
  var item = await _client.Drive.Special.AppRoot
    .ItemWithPath(file.Name)
    .Content.Request()
    .PutAsync<Item>(stream);
  // Save for the GetLink demo
  _savedId = item.Id;
}

Nachdem eine Anforderung für ein Element erstellt wurde, kann eine eindeutige Verknüpfung zu diesem Element aus dem OneDrive-Client mit der Methode CreateLink abgerufen werden, die ein IItemCreateLinkRequestBuilder zurückgibt. Der folgende Code zeigt, wie Sie mit der _savedId, die zuvor beim Hochladen einer Datei auf OneDrive gespeichert:

link = await _client.Drive
  .Items[_savedId]
  .CreateLink("view")
  .Request().PostAsync();

Natürlich kann die CreateLink-Methode für jede Anforderung Element (z. B. eine Verknüpfung zu einem Ordner abzurufen, usw.) aufgerufen werden. Beachten Sie, dass die Anforderung von der CreateLink-Methode erstellt den Dienst zurückgesendet werden muss. Die CreateLink-Methode erfordert, einen Parameter kann, der "anzeigen" oder "Bearbeiten". Je nach dem Wert dieses Parameters wird ein nur-Lese Link oder ein Lese-/ Schreibzugriff-Link erstellt werden.

Aktualisieren eines Elements

Aktualisieren eines Elements Metainformationen erfolgt mit einem Anforderung-Generator und die UpdateAsync-Methode. Z. B. nachdem Sie eine Datei hochladen, wie weiter oben in diesem Artikel gezeigt, können Sie seine ID (die Sie in das _savedId-Attribut gespeichert) auf den Namen mit den hier gezeigten Code zu ändern:

var updateItem = new Item
{
  Name = "[NewNameHere]"
};
var itemWithUpdates = await _client
  .Drive
  .Items[_savedId]
  .Request()
  .UpdateAsync(updateItem);

Verschieben eines Elements

Ein Element an einen neuen Speicherort verschieben, ist ein Sonderfall seine Eigenschaften zu aktualisieren. Aktualisieren Sie in diesem Fall die Eigenschaft ParentReference enthält Informationen zu der Position des Elements in OneDrive. Wenn Sie diese Eigenschaft mit einem neuen Speicherort ändern und das OneDrive-Element entsprechend aktualisieren, wird das Element verschoben werden.

Im folgenden Beispiel finden Sie die Datei, die Sie hochgeladen, früheren (müssen gespeichert, dessen ID im _savedId-Attribut), und verschieben Sie sie aus ihrem ursprünglichen Speicherort in den Stammordner (natürlich in einer realen Anwendung eine gewisse Fehlerbehandlung zum Code hinzugefügt werden muss):

var newLocation = await _client.Drive.Root.Request().GetAsync();
var updateItem = new Item
{
  ParentReference = new ItemReference
  {
    Id = newLocation.Id
  }
};
var itemWithUpdates = await _client
  .Drive
  .Items[_savedId]
  .Request()
  .UpdateAsync(updateItem);

Kopieren eines Elements

Kopieren eines Elements ist etwas anders als verschieben. Interessanterweise beim Verschieben oder eines Elements umbenennen, das Ergebnis des asynchronen Vorgangs sofort stammt, und die Element-Instanz mit den neuen Metainformationen (z. B. den neuen Speicherort oder der neue Name) ist. Wenn Sie ein Element kopieren, allerdings kann dies eine Weile dauern, und anstatt zu warten, bis der Vorgang abgeschlossen ist, gibt das SDK eine Instanz des IItemCopyAsyncMonitor, sobald der Kopiervorgang beginnt.

Diese Instanz hat eine Methode mit dem Namen CompleteOperationAsync, fragt das Ergebnis des Kopiervorgangs auf OneDrive, einen optionalen Status-Anbieter aktualisiert und gibt die Instanz nur, wenn der Kopiervorgang abgeschlossen ist. Dies bietet eine sehr gute UX, da es ist möglich, einen anderen Vorgang zur gleichen Zeit und der Benutzer benachrichtigt, wenn der Kopiervorgang abgeschlossen ist. Natürlich kann genau wie bei jedem Vorgang langfristig der Abfrage abbrechen (allerdings wird dies nicht den Copy-Vorgang selbst abgebrochen!). Der Code in Abbildung 4 zeigt, wie das Element, das auf den Anwendungsordner hochgeladen wurde in den Stammordner kopiert werden kann. Zuerst rufen Sie den Stammordner. Anschließend erhalten Sie die Datei, um einen neuen eindeutigen Namen (zur Vermeidung von Konflikten) zu erstellen. Abschließend wird die Datenbankkopie-Anforderung erstellt und durch eine Bereitstellung auf dem Server ausgeführt. Beachten Sie, wie Sie dann mithilfe der CompleteOperationAsync-Methode warten und den Benutzer benachrichtigen, wenn der Kopiervorgang abgeschlossen ist.

Abbildung 4 die neu hochgeladene Element in das Stammverzeichnis kopieren

var newLocation = await _client.Drive.Root.Request().GetAsync();
// Get the file to access its meta info
var file = await _client.Drive.Items[_savedId].Request().GetAsync();
var newName = Path.GetFileNameWithoutExtension(file.Name)
  + "-"
  + DateTime.Now.Ticks
  + Path.GetExtension(file.Name);
var itemStatus = await _client
  .Drive
  .Items[_savedId]
  .Copy(
    newName,
    new ItemReference
    {
      Id = newLocation.Id
    })
  .Request()
  .PostAsync();
var newItem = await itemStatus.CompleteOperationAsync(
  null,
  CancellationToken.None);
var successDialog = new MessageDialog(
  $"The item has been copied with ID {newItem.Id}",
  "Done!");
await successDialog.ShowAsync();

Erstellen eines neuen Ordners

Sind weitere Vorgänge im SDK möglich, aber bevor wir fortfahren, möchte ich erwähnen Sie ein weiteres interessantes Feature: Erstellen eines neuen Ordners. Dies ist interessant, da es in einer Auflistung (untergeordnete Elemente des übergeordneten Ordners) agiert, durch Hinzufügen eines Elements, und senden die Anforderung auf OneDrive, siehe Abbildung 5. Beachten Sie, dass in diesem Fall die Methode (AddAsync) verwendet, nicht direkt auf eine HTTP-Methode (GET, POST, PUT und so weiter) entsprechen. Nachdem der Ordner erstellt wurde, enthält die Variable NewFolderCreated die erforderlichen Informationen, insbesondere die Ordner-ID:

Abbildung 5: Erstellen eines neuen Ordners

var newFolder = new Item
{
  Name = NewFolderNameText.Text,
  Folder = new Folder()
};
var newFolderCreated = _client.Drive
  .Special.AppRoot
  .Children
  .Request()
  .AddAsync(newFolder);
var successDialog = new MessageDialog(
  $"The folder has been created with ID {newFolderCreated.Id}",
  "Done!");
await successDialog.ShowAsync();

Das Signoff und mehr

Nach dem Abschluss der Arbeit mit dem Client kann der Benutzer wählen Sie abschließend an abzeichnen. Dies ist ganz einfach mit dem OneDrive-Client SignOutAsync-Methode.

Neben den Methoden und Eigenschaften, die in diesem Artikel beschrieben sind einigen weitere Funktionen im SDK. Zum Abrufen der neuesten und besten Dokumentation zu gewährleisten, können Sie zwei verschiedene Dokumentation Quellen überprüfen:

  • Das OneDrive C# SDK auf GitHub hat ziemlich viel Dokumentation verfügbar. Sie finden sie unter bit.ly/1k0V2AL.
  • Die OneDrive-API selbst behandelt bit.ly/1QniW84.

Fehlerbehandlung

Wenn etwas falsch mit dem Aufruf des Diensts auftritt, wird eine OneDriveException ausgelöst. Ausnahmemeldungsfeld enthält jedoch Informationen zu den tatsächlichen Fehler. Stattdessen wird die Fehlerdetails in den OneDriveException Error-Eigenschaft (vom Typ Microsoft.OneDrive.Sdk.Error) enthalten. Dies ist in der Sie die Fehlermeldung sowie zusätzliche Daten können Sie die Lösung des Problems finden.

Da Fehler geschachtelt werden können, können Sie problemlos IsMatch-Methode verwenden, um für einen bestimmten Fehlercode an einer beliebigen Stelle in der Hierarchie Fehler suchen, z. B. mit:

theException.IsMatch(OneDriveErrorCode.InvalidRequest.ToString());

Abrufen und erstellen die SDK-Quelle

Während das SDK mit NuGet-Paket-Manager hinzugefügt werden kann, kann es zum Abrufen von Quellcode hilfreich sein; Geben Sie beispielsweise Folgendes ein, ändern oder Hinzufügen von Funktionen zu den Code. Dies kann problemlos entweder durch Herunterladen von der Quelle-Codes, oder (noch besser) von der Quelle Verzweigung code von GitHub und ändern Sie die Verzweigung.

Der OneDrive-SDK-Quellcodes steht unter bit.ly/1WX0Y03. Um den Code zu erhalten und eine Verzweigung erstellen, können Sie Ihren bevorzugten GitHub-Client, z. B. GitHub Desktop (desktop.github.com). Nachdem Sie den Code auf dem lokalen Computer erhalten, können Sie in Visual Studio erstellen und beispielsweise für Ihre Anwendung als einen Projektverweis hinzufügen. Von diesem Punkt können Sie an der gleichen Stelle wie nach dem Hinzufügen des SDK über NuGet.

Nachbereitung

Im ersten Artikel dieser Reihe haben Sie gesehen, wie die leistungsstarke Bibliothek aufrufen eine REST-API mithilfe der HTTP-Client, das Async/await-Schlüsselwörtern und ein JSON-Serialisierungsprogramm erstellt werden können. Jedoch ist beim heutzutage Dies ist viel einfacher als zuvor ist es immer noch sehr viel Arbeit, insbesondere, wenn die Bibliothek mit neuen Features aktualisiert werden soll.

In diesem Artikel habe ich die anderen Ansatz, nämlich mit dem OneDrive SDK von Microsoft erstellt. Sie haben gesehen, wie eine Anwendung UWP die Bibliothek hinzugefügt werden kann wie die Authentifizierung (entweder mithilfe von Anmeldeinformationen des angemeldeten Benutzers transparent oder indem Sie die webauthenticationbroker-Klasse und bietet dem Benutzer die Möglichkeit, wählen Sie ein anderes Konto usw.) funktioniert. Sie haben außerdem die nützlichsten Vorgänge wie z. B. ein Element Informationen durch den Pfad oder die ID des Ordners untergeordnete Elemente, herunterladen, umbenennen, verschieben oder Kopieren einer Datei, erhalten einen Link eindeutigen Freigabe eines Elements und vieles mehr.

Mit dem OneDrive-SDK verfügbar GitHub in open-Source und Microsoft aktiv Entwicklung neuer Features und Probleme beheben ist es einfacher denn je, Ihre UWP-apps zugreifen OneDrive. Dies eröffnet eine Auswahl von Funktionen wie z. B. Roamingeinstellungen, das Freigeben von Dokumenten zwischen Geräten und vieles mehr.


Laurent Bugnionist Senior Director bei IdentityMine, einem der führenden Unternehmen (und Gold Partner) für Microsoft-Technologien. Er lebt in Zürich in der Schweiz. Sein Buch „Silverlight 4 Unleashed“ aus dem Jahr 2010 (veröffentlicht von Sams) ist eine erweiterte Fortsetzung von „Silverlight 2 Unleashed“ (2008). Er ist der Autor mehrerer Veröffentlichungen, im neunten Jahr Microsoft MVP und im zweiten Jahr Microsoft Regional Director. Er ist Autor von der bekannten open-Source-Framework MVVM Light für Windows, WPF, Xamarin und der beliebten Pluralsight Verweis zu MVVM Light. Treten Sie mit ihm in seinem Blog unter galasoft.ch in Kontakt.

Vielen Dank an den folgenden technischen Experten von Microsoft für die Überprüfung dieses Artikels: GINA Chernoby