Skip to content
This repository was archived by the owner on Oct 2, 2024. It is now read-only.

Commit a3067b5

Browse files
committed
Merge pull request #17 from OneDrive/dev
OneDrive for Business Authentication for .NET 4.5.1, Windows 8.1, and UWP
2 parents c57c832 + 351fedb commit a3067b5

File tree

269 files changed

+6666
-927
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

269 files changed

+6666
-927
lines changed

Common/Microsoft.OneDriveSDK.nuspec

Lines changed: 23 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -14,24 +14,35 @@
1414
<iconUrl>https://dev.onedrive.com/images/OneDriveCloud.png</iconUrl>
1515
<tags>onedrive sharepoint files livesdk liveconnect cloud storage microsoftaccount windowsliveid microsoftid windowsphone windowsstore metro xaml html</tags>
1616
<dependencies>
17-
<dependency id="Newtonsoft.Json" version="7.0.1" />
17+
<group>
18+
<dependency id="Newtonsoft.Json" version="7.0.1" />
19+
</group>
20+
<group targetFramework="net451">
21+
<dependency id="Microsoft.IdentityModel.Clients.ActiveDirectory" version="2.19.208020213" />
22+
<dependency id="Newtonsoft.Json" version="7.0.1" />
23+
</group>
24+
<group targetFramework="win81">
25+
<dependency id="Microsoft.IdentityModel.Clients.ActiveDirectory" version="2.19.208020213" />
26+
<dependency id="Newtonsoft.Json" version="7.0.1" />
27+
</group>
1828
</dependencies>
1929

2030
</metadata>
2131
<files>
2232
<!-- PCL projects -->
23-
<file src="..\src\OneDriveSdk\bin\Release\OneDriveSdk.dll" target="lib\portable-net45+wp8+win8\OneDriveSdk.dll" />
24-
25-
<!-- Standard .NET projects, like Windows Forms or ASP.NET -->
26-
<file src="..\src\OneDriveSdk\bin\Release\OneDriveSdk.dll" target="lib\net451\OneDriveSdk.dll" />
27-
<file src="..\src\OneDriveSdk.WindowsForms\bin\Release\OneDriveSdk.WindowsForms.dll" target="lib\net451\OneDriveSdk.WindowsForms.dll" />
28-
33+
<file src="..\src\OneDriveSdk\bin\Release\OneDriveSdk.dll" target="lib\portable-net451+wp81+win81\OneDriveSdk.dll" />
34+
35+
<!-- Standard .NET projects, like Windows Forms or ASP.NET -->
36+
<file src="..\src\OneDriveSdk\bin\Release\OneDriveSdk.dll" target="lib\net451\OneDriveSdk.dll" />
37+
<file src="..\src\OneDriveSdk.WindowsForms\bin\Release\OneDriveSdk.WindowsForms.dll" target="lib\net451\OneDriveSdk.WindowsForms.dll" />
38+
2939
<!-- Windows Phone 8.1 -->
30-
<file src="..\src\OneDriveSdk\bin\Release\OneDriveSdk.dll" target="lib\wpa81\OneDriveSdk.dll" />
31-
<file src="..\src\OneDriveSdk.WinStore\bin\Release\OneDriveSdk.WinStore.dll" target="lib\wpa81\OneDriveSdk.WinStore.dll" />
32-
40+
<file src="..\src\OneDriveSdk\bin\Release\OneDriveSdk.dll" target="lib\wpa81\OneDriveSdk.dll" />
41+
<file src="..\src\OneDriveSdk.WinStore\bin\Release\OneDriveSdk.WinStore.dll" target="lib\wpa81\OneDriveSdk.WinStore.dll" />
42+
3343
<!-- Windows 8.1 -->
34-
<file src="..\src\OneDriveSdk\bin\Release\OneDriveSdk.dll" target="lib\netcore451\OneDriveSdk.dll" />
35-
<file src="..\src\OneDriveSdk.WinStore\bin\Release\OneDriveSdk.WinStore.dll" target="lib\netcore451\OneDriveSdk.WinStore.dll" />
44+
<file src="..\src\OneDriveSdk\bin\Release\OneDriveSdk.dll" target="lib\win81\OneDriveSdk.dll" />
45+
<file src="..\src\OneDriveSdk.WinRT\bin\Release\OneDriveSdk.WinRT.dll" target="lib\win81\OneDriveSdk.WinRT.dll" />
46+
<file src="..\src\OneDriveSdk.WinStore\bin\Release\OneDriveSdk.WinStore.dll" target="lib\win81\OneDriveSdk.WinStore.dll" />
3647
</files>
3748
</package>

OneDriveSdk.sln

Lines changed: 58 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,12 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "tests", "tests", "{369050EF
2424
EndProject
2525
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Test.OneDriveSdk", "tests\Test.OneDriveSdk\Test.OneDriveSdk.csproj", "{E3A990AA-5628-42AA-A8D4-1C599602DD96}"
2626
EndProject
27+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OneDriveSdk.WinRT", "src\OneDriveSdk.WinRT\OneDriveSdk.WinRT.csproj", "{9F6BB55B-3985-42E8-88DE-CE10A39C6389}"
28+
EndProject
29+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Test.OneDriveSdk.WinRT", "tests\Test.OneDriveSdk.WinRT\Test.OneDriveSdk.WinRT.csproj", "{61BCEAD9-36D4-49B6-9B0F-1999CDCD149F}"
30+
EndProject
31+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Test.OneDriveSdk.WindowsForms", "tests\Test.OneDriveSdk.WindowsForms\Test.OneDriveSdk.WindowsForms.csproj", "{6C0D57DC-89C6-4313-BB2C-2CCB662AFDFB}"
32+
EndProject
2733
Global
2834
GlobalSection(SolutionConfigurationPlatforms) = preSolution
2935
Debug|Any CPU = Debug|Any CPU
@@ -36,21 +42,17 @@ Global
3642
Release|x86 = Release|x86
3743
EndGlobalSection
3844
GlobalSection(ProjectConfigurationPlatforms) = postSolution
39-
{8C314CEE-EA97-4CCC-88C3-08C5B076DB83}.Debug|Any CPU.ActiveCfg = Debug|x64
40-
{8C314CEE-EA97-4CCC-88C3-08C5B076DB83}.Debug|Any CPU.Build.0 = Debug|x64
41-
{8C314CEE-EA97-4CCC-88C3-08C5B076DB83}.Debug|ARM.ActiveCfg = Debug|ARM
42-
{8C314CEE-EA97-4CCC-88C3-08C5B076DB83}.Debug|ARM.Build.0 = Debug|ARM
43-
{8C314CEE-EA97-4CCC-88C3-08C5B076DB83}.Debug|ARM.Deploy.0 = Debug|ARM
45+
{8C314CEE-EA97-4CCC-88C3-08C5B076DB83}.Debug|Any CPU.ActiveCfg = Debug|x86
46+
{8C314CEE-EA97-4CCC-88C3-08C5B076DB83}.Debug|ARM.ActiveCfg = Debug|x86
4447
{8C314CEE-EA97-4CCC-88C3-08C5B076DB83}.Debug|x64.ActiveCfg = Debug|x64
4548
{8C314CEE-EA97-4CCC-88C3-08C5B076DB83}.Debug|x64.Build.0 = Debug|x64
49+
{8C314CEE-EA97-4CCC-88C3-08C5B076DB83}.Debug|x64.Deploy.0 = Debug|x64
4650
{8C314CEE-EA97-4CCC-88C3-08C5B076DB83}.Debug|x86.ActiveCfg = Debug|x86
4751
{8C314CEE-EA97-4CCC-88C3-08C5B076DB83}.Debug|x86.Build.0 = Debug|x86
4852
{8C314CEE-EA97-4CCC-88C3-08C5B076DB83}.Debug|x86.Deploy.0 = Debug|x86
4953
{8C314CEE-EA97-4CCC-88C3-08C5B076DB83}.Release|Any CPU.ActiveCfg = Release|x86
50-
{8C314CEE-EA97-4CCC-88C3-08C5B076DB83}.Release|ARM.ActiveCfg = Release|ARM
51-
{8C314CEE-EA97-4CCC-88C3-08C5B076DB83}.Release|ARM.Build.0 = Release|ARM
52-
{8C314CEE-EA97-4CCC-88C3-08C5B076DB83}.Release|ARM.Deploy.0 = Release|ARM
53-
{8C314CEE-EA97-4CCC-88C3-08C5B076DB83}.Release|x64.ActiveCfg = Release|x64
54+
{8C314CEE-EA97-4CCC-88C3-08C5B076DB83}.Release|ARM.ActiveCfg = Release|x86
55+
{8C314CEE-EA97-4CCC-88C3-08C5B076DB83}.Release|x64.ActiveCfg = Release|x86
5456
{8C314CEE-EA97-4CCC-88C3-08C5B076DB83}.Release|x64.Build.0 = Release|x64
5557
{8C314CEE-EA97-4CCC-88C3-08C5B076DB83}.Release|x64.Deploy.0 = Release|x64
5658
{8C314CEE-EA97-4CCC-88C3-08C5B076DB83}.Release|x86.ActiveCfg = Release|x86
@@ -129,13 +131,53 @@ Global
129131
{E3A990AA-5628-42AA-A8D4-1C599602DD96}.Debug|x86.ActiveCfg = Debug|Any CPU
130132
{E3A990AA-5628-42AA-A8D4-1C599602DD96}.Debug|x86.Build.0 = Debug|Any CPU
131133
{E3A990AA-5628-42AA-A8D4-1C599602DD96}.Release|Any CPU.ActiveCfg = Release|Any CPU
132-
{E3A990AA-5628-42AA-A8D4-1C599602DD96}.Release|Any CPU.Build.0 = Release|Any CPU
133134
{E3A990AA-5628-42AA-A8D4-1C599602DD96}.Release|ARM.ActiveCfg = Release|Any CPU
134-
{E3A990AA-5628-42AA-A8D4-1C599602DD96}.Release|ARM.Build.0 = Release|Any CPU
135135
{E3A990AA-5628-42AA-A8D4-1C599602DD96}.Release|x64.ActiveCfg = Release|Any CPU
136-
{E3A990AA-5628-42AA-A8D4-1C599602DD96}.Release|x64.Build.0 = Release|Any CPU
137136
{E3A990AA-5628-42AA-A8D4-1C599602DD96}.Release|x86.ActiveCfg = Release|Any CPU
138-
{E3A990AA-5628-42AA-A8D4-1C599602DD96}.Release|x86.Build.0 = Release|Any CPU
137+
{9F6BB55B-3985-42E8-88DE-CE10A39C6389}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
138+
{9F6BB55B-3985-42E8-88DE-CE10A39C6389}.Debug|Any CPU.Build.0 = Debug|Any CPU
139+
{9F6BB55B-3985-42E8-88DE-CE10A39C6389}.Debug|ARM.ActiveCfg = Debug|Any CPU
140+
{9F6BB55B-3985-42E8-88DE-CE10A39C6389}.Debug|ARM.Build.0 = Debug|Any CPU
141+
{9F6BB55B-3985-42E8-88DE-CE10A39C6389}.Debug|x64.ActiveCfg = Debug|Any CPU
142+
{9F6BB55B-3985-42E8-88DE-CE10A39C6389}.Debug|x64.Build.0 = Debug|Any CPU
143+
{9F6BB55B-3985-42E8-88DE-CE10A39C6389}.Debug|x86.ActiveCfg = Debug|Any CPU
144+
{9F6BB55B-3985-42E8-88DE-CE10A39C6389}.Debug|x86.Build.0 = Debug|Any CPU
145+
{9F6BB55B-3985-42E8-88DE-CE10A39C6389}.Release|Any CPU.ActiveCfg = Release|Any CPU
146+
{9F6BB55B-3985-42E8-88DE-CE10A39C6389}.Release|Any CPU.Build.0 = Release|Any CPU
147+
{9F6BB55B-3985-42E8-88DE-CE10A39C6389}.Release|ARM.ActiveCfg = Release|Any CPU
148+
{9F6BB55B-3985-42E8-88DE-CE10A39C6389}.Release|ARM.Build.0 = Release|Any CPU
149+
{9F6BB55B-3985-42E8-88DE-CE10A39C6389}.Release|x64.ActiveCfg = Release|Any CPU
150+
{9F6BB55B-3985-42E8-88DE-CE10A39C6389}.Release|x64.Build.0 = Release|Any CPU
151+
{9F6BB55B-3985-42E8-88DE-CE10A39C6389}.Release|x86.ActiveCfg = Release|Any CPU
152+
{9F6BB55B-3985-42E8-88DE-CE10A39C6389}.Release|x86.Build.0 = Release|Any CPU
153+
{61BCEAD9-36D4-49B6-9B0F-1999CDCD149F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
154+
{61BCEAD9-36D4-49B6-9B0F-1999CDCD149F}.Debug|Any CPU.Build.0 = Debug|Any CPU
155+
{61BCEAD9-36D4-49B6-9B0F-1999CDCD149F}.Debug|Any CPU.Deploy.0 = Debug|Any CPU
156+
{61BCEAD9-36D4-49B6-9B0F-1999CDCD149F}.Debug|ARM.ActiveCfg = Debug|Any CPU
157+
{61BCEAD9-36D4-49B6-9B0F-1999CDCD149F}.Debug|ARM.Build.0 = Debug|Any CPU
158+
{61BCEAD9-36D4-49B6-9B0F-1999CDCD149F}.Debug|ARM.Deploy.0 = Debug|Any CPU
159+
{61BCEAD9-36D4-49B6-9B0F-1999CDCD149F}.Debug|x64.ActiveCfg = Debug|Any CPU
160+
{61BCEAD9-36D4-49B6-9B0F-1999CDCD149F}.Debug|x64.Build.0 = Debug|Any CPU
161+
{61BCEAD9-36D4-49B6-9B0F-1999CDCD149F}.Debug|x64.Deploy.0 = Debug|Any CPU
162+
{61BCEAD9-36D4-49B6-9B0F-1999CDCD149F}.Debug|x86.ActiveCfg = Debug|Any CPU
163+
{61BCEAD9-36D4-49B6-9B0F-1999CDCD149F}.Debug|x86.Build.0 = Debug|Any CPU
164+
{61BCEAD9-36D4-49B6-9B0F-1999CDCD149F}.Debug|x86.Deploy.0 = Debug|Any CPU
165+
{61BCEAD9-36D4-49B6-9B0F-1999CDCD149F}.Release|Any CPU.ActiveCfg = Release|Any CPU
166+
{61BCEAD9-36D4-49B6-9B0F-1999CDCD149F}.Release|ARM.ActiveCfg = Release|Any CPU
167+
{61BCEAD9-36D4-49B6-9B0F-1999CDCD149F}.Release|x64.ActiveCfg = Release|Any CPU
168+
{61BCEAD9-36D4-49B6-9B0F-1999CDCD149F}.Release|x86.ActiveCfg = Release|Any CPU
169+
{6C0D57DC-89C6-4313-BB2C-2CCB662AFDFB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
170+
{6C0D57DC-89C6-4313-BB2C-2CCB662AFDFB}.Debug|Any CPU.Build.0 = Debug|Any CPU
171+
{6C0D57DC-89C6-4313-BB2C-2CCB662AFDFB}.Debug|ARM.ActiveCfg = Debug|Any CPU
172+
{6C0D57DC-89C6-4313-BB2C-2CCB662AFDFB}.Debug|ARM.Build.0 = Debug|Any CPU
173+
{6C0D57DC-89C6-4313-BB2C-2CCB662AFDFB}.Debug|x64.ActiveCfg = Debug|Any CPU
174+
{6C0D57DC-89C6-4313-BB2C-2CCB662AFDFB}.Debug|x64.Build.0 = Debug|Any CPU
175+
{6C0D57DC-89C6-4313-BB2C-2CCB662AFDFB}.Debug|x86.ActiveCfg = Debug|Any CPU
176+
{6C0D57DC-89C6-4313-BB2C-2CCB662AFDFB}.Debug|x86.Build.0 = Debug|Any CPU
177+
{6C0D57DC-89C6-4313-BB2C-2CCB662AFDFB}.Release|Any CPU.ActiveCfg = Release|Any CPU
178+
{6C0D57DC-89C6-4313-BB2C-2CCB662AFDFB}.Release|ARM.ActiveCfg = Release|Any CPU
179+
{6C0D57DC-89C6-4313-BB2C-2CCB662AFDFB}.Release|x64.ActiveCfg = Release|Any CPU
180+
{6C0D57DC-89C6-4313-BB2C-2CCB662AFDFB}.Release|x86.ActiveCfg = Release|Any CPU
139181
EndGlobalSection
140182
GlobalSection(SolutionProperties) = preSolution
141183
HideSolutionNode = FALSE
@@ -147,5 +189,8 @@ Global
147189
{C48558A9-320F-464D-BEF4-48266F3CF2D3} = {2EFD6E75-C1E0-4600-88D6-BFEDAD24A50A}
148190
{A8C54259-542C-40AC-AEB6-EEFC3AA79859} = {2EFD6E75-C1E0-4600-88D6-BFEDAD24A50A}
149191
{E3A990AA-5628-42AA-A8D4-1C599602DD96} = {369050EF-15AF-4B0E-98DF-085B91E1B68D}
192+
{9F6BB55B-3985-42E8-88DE-CE10A39C6389} = {2EFD6E75-C1E0-4600-88D6-BFEDAD24A50A}
193+
{61BCEAD9-36D4-49B6-9B0F-1999CDCD149F} = {369050EF-15AF-4B0E-98DF-085B91E1B68D}
194+
{6C0D57DC-89C6-4313-BB2C-2CCB662AFDFB} = {369050EF-15AF-4B0E-98DF-085B91E1B68D}
150195
EndGlobalSection
151196
EndGlobal

README.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,12 @@ frameworks:
1212
* .NET for Windows Store apps
1313
* Windows Phone 8.1 and higher
1414

15+
Azure Active Directory authentication is available for:
16+
17+
* Windows Forms apps
18+
* UWP apps
19+
* Windows 8.1 apps
20+
1521
## Installation via Nuget
1622

1723
To install the OneDrive SDK via NuGet

build/35MSSharedLib1024.snk

160 Bytes
Binary file not shown.

docs/auth.md

Lines changed: 62 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -5,17 +5,9 @@ To authenticate your app to use OneDrive, you need to get a `OneDriveClient`, wh
55

66
**Note** This topic assumes that you are familiar with app authentication. For more info about authentication in OneDrive, see [Authentication for the OneDrive API](https://dev.onedrive.com/auth/readme.htm).
77

8-
## Simple authentication
9-
The easiest way to get an authenticated client is to call `GetMicrosoftAccountClient`, which returns a `OneDriveClient` object, and then call `AuthenticateAsync` on the resulting object:
8+
## Standard authentication components
109

11-
```csharp
12-
var oneDriveClient = OneDriveClient.GetMicrosoftAccountClient(
13-
clientId,
14-
returnUrl,
15-
scopes);
16-
17-
await oneDriveClient.AuthenticateAsync();
18-
```
10+
Various helper methods are available for constructing a client. All of them take a set of standard parameters:
1911

2012
| Paramater | Description |
2113
|:----------|:------------|
@@ -24,7 +16,12 @@ await oneDriveClient.AuthenticateAsync();
2416
| _scopes_ | Permissions that your app requires from the user. Required. |
2517
| _client\_secret_ | The client secret created for your app. Optional. Not available for Windows Store 8.1, Windows Phone 8.1, and Universal Windows Platform (UWP) apps. |
2618

27-
In addition to _clientId_, _returnURL_, _scopes_, and _client\_secret_ the method takes in implementations for a credential cache, HTTP provider, and a service info provider or web authentication UI. If not provided, the default implementations of each item will be used.
19+
In addition to _clientId_, _returnURL_, _scopes_, and _client\_secret_ the method takes in implementations for a client type, credential cache, HTTP provider, and a service info provider or web authentication UI. If not provided, the default implementations of each item will be used.
20+
21+
### ClientType
22+
A single client can only call OneDrive for Consumer or OneDrive for Business, not both. The service type is specified via passing ClientType `Personal` or `Business` to the client. The default client type is `Personal`.
23+
24+
If the application would like to interact with both OneDrive for Consumer and OneDrive for Business a client should be created for each.
2825

2926
### CredentialCache
3027

@@ -42,6 +39,19 @@ The service info provider is responsible for providing information for accessing
4239

4340
When you use the default `IServiceInfoProvider` and `IAuthenticationProvider` implementations, an `IWebAuthenticationUi` implementation is required to display authentication UI to the user. Default implementations are available for WinForms, Windows 8.1, Windows Phone 8.1, and UWP applications. If no `IWebAuthenticationUi` implementation is present, only the silent authentication flow will be used.
4441

42+
# Microsoft account (MSA) authentication
43+
## Simple authentication
44+
The easiest way to get an authenticated client is to use one of the `OneDriveClient` extensions and call `AuthenticateAsync` on the resulting client:
45+
46+
```csharp
47+
var oneDriveClient = OneDriveClient.GetMicrosoftAccountClient(
48+
clientId,
49+
returnUrl,
50+
scopes);
51+
52+
await oneDriveClient.AuthenticateAsync();
53+
```
54+
4555
## Authentication for WinForms
4656

4757
```csharp
@@ -56,7 +66,7 @@ await oneDriveClient.AuthenticateAsync();
5666

5767
## Windows 8.1, Windows Phone 8.1, and UWP
5868

59-
The OneDriveClient extensions are available based on the build target of the project. For Windows 8.1, Windows Phone 8.1, and UWP projects, there are three available methods depending on which Windows authentication API is used to retrieve a client:
69+
The OneDriveClient extensions available are based on the build target of the project. For Windows 8.1, Windows Phone 8.1, and UWP projects, there are three available methods depending on which Windows authentication API is used to retrieve a client:
6070

6171
* `GetClientUsingOnlineIdAuthenticator`
6272
* `GetClientUsingWebAuthenticationBroker`
@@ -91,3 +101,43 @@ To sign out you can call:
91101
```csharp
92102
await oneDriveClient.SignOutAsync();
93103
```
104+
105+
# Azure Active Directory (AAD) authentication
106+
107+
The SDK uses [ADAL](https://github.com/AzureAD/azure-activedirectory-library-for-dotnet) for authentication against AAD. Implementations are available for WinForms, Windows 8.1, and UWP apps. Due to technical limitations, **Windows Phone 8.1 is not supported**.
108+
109+
## Caching credentials
110+
111+
Since ADAL has its own caching model, AAD authentication has its own CredentialCache implementation for caching, the AdalCredentialCache, that wraps the ADAL caching functionality. The mechanisms for interacting with the cache are the same as with Credential Cache but it can only be used for AAD credential caching. If a CredentialCache is provided that is not an AdalCredentialCache operations will bypass writing to it.
112+
113+
## Authentication using the discovery service
114+
115+
In the case where the OneDrive for Business API endpoint and resource ID aren't known it is possible to authenticate using the [discovery service](https://msdn.microsoft.com/en-us/office/office365/howto/discover-service-endpoints).
116+
117+
```csharp
118+
var oneDriveClient = BusinessClientExtensions.GetActiveDirectoryClient(clientId, returnUrl);
119+
120+
await oneDriveClient.AuthenticateAsync();
121+
```
122+
123+
## Authentication using the OneDrive for Business API endpoint and resource ID
124+
125+
If the OneDrive for Business API endpoint and resource ID are already known they can be provided to the client and authentication will not route through the discovery service.
126+
127+
```csharp
128+
var oneDriveClient = BusinessClientExtensions.GetActiveDirectoryClient(
129+
clientId,
130+
returnUrl,
131+
oneDriveApiEndpoint,
132+
serviceResourceId)
133+
134+
await oneDriveClient.AuthenticateAsync();
135+
```
136+
137+
## Signing out
138+
139+
To sign out you can call:
140+
141+
```csharp
142+
await oneDriveClient.SignOutAsync();
143+
```

docs/collections.md

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -71,5 +71,4 @@ var deltaCollectionPage = await oneDriveClient
7171
.GetAsync();
7272
```
7373

74-
`IItemDeltaCollectionPage` is an `ICollectionPage<Item>` object with a `Token` property and a `DeltaLink` property. The token link can be used to pass into `Delta:` when you want to check for more changes. You can also construct a delta request with the `DeltaLink` property. The `NextPageRequest` is an `IItemDeltaRequest` to be used for paging purposes and will be null when there are no more changes.
75-
74+
`IItemDeltaCollectionPage` is an `ICollectionPage<Item>` object with a `Token` property and a `DeltaLink` property. The token link can be used to pass into `Delta:` when you want to check for more changes. You can also construct a delta request with the `DeltaLink` property. The `NextPageRequest` is an `IItemDeltaRequest` to be used for paging purposes and will be null when there are no more changes.

docs/errors.md

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,5 +32,4 @@ if (exception.IsMatch(OneDriveErrorCode.AuthenticationFailure.ToString())
3232
}
3333
```
3434

35-
The `Message` property will contain more detailed error information if available.
36-
35+
The `Message` property will contain more detailed error information if available.

docs/items.md

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -141,5 +141,4 @@ To poll until the copy action completes:
141141
var newItem = await asyncStatus.CompleteOperationAsync(null, CancellationToken.None);
142142
```
143143

144-
`CompleteOperationAsync` takes in an `IProgress<AsyncOperationStatus>` for reporting back progress status and a `CancellationToken` for action cancellation. The method will poll until completion unless cancelled.
145-
144+
`CompleteOperationAsync` takes in an `IProgress<AsyncOperationStatus>` for reporting back progress status and a `CancellationToken` for action cancellation. The method will poll until completion unless cancelled.

0 commit comments

Comments
 (0)