Skip to content

Commit 1c1463d

Browse files
committed
Added RequestExtensions
1 parent cba2c1b commit 1c1463d

File tree

7 files changed

+57
-57
lines changed

7 files changed

+57
-57
lines changed
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
// ------------------------------------------------------------------------------
2+
// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the MIT License. See License in the project root for license information.
3+
// ------------------------------------------------------------------------------
4+
5+
namespace Microsoft.Graph
6+
{
7+
using System.Net.Http;
8+
/// <summary>
9+
/// Contains extension methods for <see cref="HttpRequestMessage"/>
10+
/// </summary>
11+
internal static class RequestExtensions
12+
{
13+
/// <summary>
14+
/// Checks the HTTP request's content to determine if it's buffered or streamed content.
15+
/// </summary>
16+
/// <param name="httpRequestMessage">The <see cref="HttpRequestMessage"/>needs to be sent.</param>
17+
/// <returns></returns>
18+
internal static bool IsBuffered(this HttpRequestMessage httpRequestMessage)
19+
{
20+
HttpContent requestContent = httpRequestMessage.Content;
21+
22+
if ((httpRequestMessage.Method == HttpMethod.Put || httpRequestMessage.Method == HttpMethod.Post || httpRequestMessage.Method.Method.Equals("PATCH"))
23+
&& requestContent != null && (requestContent.Headers.ContentLength == null || (int)requestContent.Headers.ContentLength == -1))
24+
{
25+
return false;
26+
}
27+
return true;
28+
}
29+
}
30+
}

src/Microsoft.Graph.Core/Helpers/ContentHelper.cs

Lines changed: 0 additions & 27 deletions
This file was deleted.

src/Microsoft.Graph.Core/Requests/AuthenticationHandler.cs

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,8 @@ namespace Microsoft.Graph
88
using System.Threading;
99
using System.Threading.Tasks;
1010
using System.Net;
11-
using Microsoft.Graph.Core.Helpers;
1211
/// <summary>
13-
/// An <see cref="DelegatingHandler"/> implementation using standard .NET libraries.
12+
/// A <see cref="DelegatingHandler"/> implementation using standard .NET libraries.
1413
/// </summary>
1514
public class AuthenticationHandler: DelegatingHandler
1615
{
@@ -53,7 +52,7 @@ public AuthenticationHandler(IAuthenticationProvider authenticationProvider, Htt
5352
}
5453

5554
/// <summary>
56-
/// Check HTTP response message status code if it's unauthorized (401) or not
55+
/// Checks HTTP response message status code if it's unauthorized (401) or not
5756
/// </summary>
5857
/// <param name="httpResponseMessage">The <see cref="HttpResponseMessage"/>to send.</param>
5958
/// <returns></returns>
@@ -81,7 +80,7 @@ private async Task<HttpResponseMessage> SendRetryAsync(HttpResponseMessage httpR
8180

8281
retryAttempt++;
8382

84-
if (!IsUnauthorized(httpResponseMessage) || !ContentHelper.IsBuffered(originalRequest))
83+
if (!IsUnauthorized(httpResponseMessage) || !originalRequest.IsBuffered())
8584
{
8685
// Re-issue the request to get a new access token
8786
return httpResponseMessage;
@@ -92,23 +91,24 @@ private async Task<HttpResponseMessage> SendRetryAsync(HttpResponseMessage httpR
9291
}
9392

9493
/// <summary>
95-
/// Send a HTTP request and retries the request when the response if unauthorized
94+
/// Sends a HTTP request and retries the request when the response is unauthorized.
95+
/// This can happen when a token from the cache expires between graph getting the request and the backend receiving the request
9696
/// </summary>
97-
/// <param name="httpRequest">The <see cref="HttpRequestMessage"/> to send.</param>
97+
/// <param name="httpRequestMessage">The <see cref="HttpRequestMessage"/> to send.</param>
9898
/// <param name="cancellationToken">The <see cref="CancellationToken"/> for the request.</param>
9999
/// <returns></returns>
100-
protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage httpRequest, CancellationToken cancellationToken)
100+
protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage httpRequestMessage, CancellationToken cancellationToken)
101101
{
102102
// Authenticate request using AuthenticationProvider
103103
if (AuthenticationProvider != null)
104104
{
105-
await AuthenticationProvider.AuthenticateRequestAsync(httpRequest);
105+
await AuthenticationProvider.AuthenticateRequestAsync(httpRequestMessage);
106106
}
107107

108-
HttpResponseMessage response = await base.SendAsync(httpRequest, cancellationToken);
108+
HttpResponseMessage response = await base.SendAsync(httpRequestMessage, cancellationToken);
109109

110110
// Chcek if response is a 401 & is not a streamed body (is buffered)
111-
if (IsUnauthorized(response) && ContentHelper.IsBuffered(httpRequest) && (AuthenticationProvider != null))
111+
if (IsUnauthorized(response) && httpRequestMessage.IsBuffered() && (AuthenticationProvider != null))
112112
{
113113
// re-issue the request to get a new access token
114114
response = await SendRetryAsync(response, cancellationToken);

src/Microsoft.Graph.Core/Requests/RetryHandler.cs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ namespace Microsoft.Graph
1111
using System.Net.Http;
1212
using System.Net;
1313
using System.Net.Http.Headers;
14-
using Microsoft.Graph.Core.Helpers;
1514

1615
/// <summary>
1716
/// An <see cref="DelegatingHandler"/> implementation using standard .NET libraries.
@@ -56,7 +55,7 @@ protected async override Task<HttpResponseMessage> SendAsync(HttpRequestMessage
5655

5756
var response = await base.SendAsync(httpRequest, cancellationToken);
5857

59-
if (IsRetry(response) && ContentHelper.IsBuffered(httpRequest))
58+
if (IsRetry(response) && httpRequest.IsBuffered())
6059
{
6160
response = await SendRetryAsync(response, cancellationToken);
6261
}
@@ -96,7 +95,7 @@ public async Task<HttpResponseMessage> SendRetryAsync(HttpResponseMessage respon
9695
// Call base.SendAsync to send the request
9796
response = await base.SendAsync(request, cancellationToken);
9897

99-
if (!IsRetry(response) || !ContentHelper.IsBuffered(request))
98+
if (!IsRetry(response) || !request.IsBuffered())
10099
{
101100
return response;
102101
}

tests/Microsoft.Graph.Core.Test/Helpers/ContentHelperTests.cs renamed to tests/Microsoft.Graph.Core.Test/Extensions/RequestExtensionsTests.cs

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,28 +2,27 @@
22
// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the MIT License. See License in the project root for license information.
33
// ------------------------------------------------------------------------------
44

5-
namespace Microsoft.Graph.Core.Test.Helpers
5+
namespace Microsoft.Graph.Core.Test.Extensions
66
{
7-
using Microsoft.Graph.Core.Helpers;
87
using Microsoft.VisualStudio.TestTools.UnitTesting;
98
using System.Net.Http;
109

1110
[TestClass]
12-
public class ContentHelperTests
11+
public class RequestExtensionsTests
1312
{
1413
[TestMethod]
1514
public void IsBuffered_Get()
1615
{
1716
HttpRequestMessage httpRequest = new HttpRequestMessage(HttpMethod.Get, "http://example.com");
18-
var response = ContentHelper.IsBuffered(httpRequest);
17+
var response = httpRequest.IsBuffered();
1918

2019
Assert.IsTrue(response, "Unexpected content type");
2120
}
2221
[TestMethod]
2322
public void IsBuffered_PostWithNoContent()
2423
{
2524
HttpRequestMessage httpRequest = new HttpRequestMessage(HttpMethod.Post, "http://example.com");
26-
var response = ContentHelper.IsBuffered(httpRequest);
25+
var response = httpRequest.IsBuffered();
2726

2827
Assert.IsTrue(response, "Unexpected content type");
2928
}
@@ -33,7 +32,7 @@ public void IsBuffered_PostWithBufferStringContent()
3332
byte[] data = new byte[] { 1, 2, 3, 4, 5 };
3433
HttpRequestMessage httpRequest = new HttpRequestMessage(HttpMethod.Post, "http://example.com");
3534
httpRequest.Content = new ByteArrayContent(data);
36-
var response = ContentHelper.IsBuffered(httpRequest);
35+
var response = httpRequest.IsBuffered();
3736

3837
Assert.IsTrue(response, "Unexpected content type");
3938
}
@@ -50,7 +49,7 @@ public void IsBuffered_PutWithStreamStringContent()
5049
HttpRequestMessage httpRequest = new HttpRequestMessage(HttpMethod.Put, "http://example.com");
5150
httpRequest.Content = mutliformDataContent;
5251
httpRequest.Content.Headers.ContentLength = -1;
53-
var response = ContentHelper.IsBuffered(httpRequest);
52+
var response = httpRequest.IsBuffered();
5453

5554
Assert.IsFalse(response, "Unexpected content type");
5655
}
@@ -61,7 +60,7 @@ public void IsBuffered_PatchWithStreamStringContent()
6160
HttpRequestMessage httpRequest = new HttpRequestMessage(new HttpMethod("PATCH"), "http://example.com");
6261
httpRequest.Content = new StringContent("Hello World");
6362
httpRequest.Content.Headers.ContentLength = null;
64-
var response = ContentHelper.IsBuffered(httpRequest);
63+
var response = httpRequest.IsBuffered();
6564

6665
Assert.IsFalse(response, "Unexpected content type");
6766
}

tests/Microsoft.Graph.Core.Test/Microsoft.Graph.Core.Test.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@
7979
<Compile Include="Authentication\DelegateAuthenticationProviderTests.cs" />
8080
<Compile Include="Exceptions\ErrorTests.cs" />
8181
<Compile Include="Exceptions\ServiceExceptionTests.cs" />
82-
<Compile Include="Helpers\ContentHelperTests.cs" />
82+
<Compile Include="Extensions\RequestExtensionsTests.cs" />
8383
<Compile Include="Helpers\ExtractSelectHelperTest.cs" />
8484
<Compile Include="Helpers\StringHelperTests.cs" />
8585
<Compile Include="Helpers\UrlHelperTests.cs" />

tests/Microsoft.Graph.DotnetCore.Core.Test/Helpers/ContentHelperTests.cs renamed to tests/Microsoft.Graph.DotnetCore.Core.Test/Extensions/RequestExtensionsTests.cs

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,26 +2,25 @@
22
// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the MIT License. See License in the project root for license information.
33
// ------------------------------------------------------------------------------
44

5-
namespace Microsoft.Graph.DotnetCore.Core.Test.Helpers
5+
namespace Microsoft.Graph.DotnetCore.Core.Test.Extensions
66
{
7-
using Microsoft.Graph.Core.Helpers;
87
using System.Net.Http;
98
using Xunit;
10-
public class ContentHelperTests
9+
public class RequestExtensionsTests
1110
{
1211
[Fact]
1312
public void IsBuffered_Get()
1413
{
1514
HttpRequestMessage httpRequest = new HttpRequestMessage(HttpMethod.Get, "http://example.com");
16-
var response = ContentHelper.IsBuffered(httpRequest);
15+
var response = httpRequest.IsBuffered();
1716

1817
Assert.True(response, "Unexpected content type");
1918
}
2019
[Fact]
2120
public void IsBuffered_PostWithNoContent()
2221
{
2322
HttpRequestMessage httpRequest = new HttpRequestMessage(HttpMethod.Post, "http://example.com");
24-
var response = ContentHelper.IsBuffered(httpRequest);
23+
var response = httpRequest.IsBuffered();
2524

2625
Assert.True(response, "Unexpected content type");
2726
}
@@ -31,7 +30,7 @@ public void IsBuffered_PostWithBufferStringContent()
3130
byte[] data = new byte[] { 1, 2, 3, 4, 5 };
3231
HttpRequestMessage httpRequest = new HttpRequestMessage(HttpMethod.Post, "http://example.com");
3332
httpRequest.Content = new ByteArrayContent(data);
34-
var response = ContentHelper.IsBuffered(httpRequest);
33+
var response = httpRequest.IsBuffered();
3534

3635
Assert.True(response, "Unexpected content type");
3736
}
@@ -48,7 +47,7 @@ public void IsBuffered_PutWithStreamStringContent()
4847
HttpRequestMessage httpRequest = new HttpRequestMessage(HttpMethod.Put, "http://example.com");
4948
httpRequest.Content = mutliformDataContent;
5049
httpRequest.Content.Headers.ContentLength = -1;
51-
var response = ContentHelper.IsBuffered(httpRequest);
50+
var response = httpRequest.IsBuffered();
5251

5352
Assert.False(response, "Unexpected content type");
5453
}
@@ -59,7 +58,7 @@ public void IsBuffered_PatchWithStreamStringContent()
5958
HttpRequestMessage httpRequest = new HttpRequestMessage(new HttpMethod("PATCH"), "http://example.com");
6059
httpRequest.Content = new StringContent("Hello World");
6160
httpRequest.Content.Headers.ContentLength = null;
62-
var response = ContentHelper.IsBuffered(httpRequest);
61+
var response = httpRequest.IsBuffered();
6362

6463
Assert.False(response, "Unexpected content type");
6564
}

0 commit comments

Comments
 (0)