diff options
Diffstat (limited to 'src/DotNetOpenAuth.Test/AutoRedirectHandler.cs')
-rw-r--r-- | src/DotNetOpenAuth.Test/AutoRedirectHandler.cs | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/src/DotNetOpenAuth.Test/AutoRedirectHandler.cs b/src/DotNetOpenAuth.Test/AutoRedirectHandler.cs new file mode 100644 index 0000000..3f67259 --- /dev/null +++ b/src/DotNetOpenAuth.Test/AutoRedirectHandler.cs @@ -0,0 +1,33 @@ +namespace DotNetOpenAuth.Test { + using System; + using System.Collections.Generic; + using System.Linq; + using System.Net; + using System.Net.Http; + using System.Text; + using System.Threading.Tasks; + + using DotNetOpenAuth.Messaging; + + internal class AutoRedirectHandler : DelegatingHandler { + internal AutoRedirectHandler(HttpMessageHandler innerHandler) + : base(innerHandler) { + } + + protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, System.Threading.CancellationToken cancellationToken) { + HttpResponseMessage response = null; + do { + if (response != null) { + var modifiedRequest = MessagingUtilities.Clone(request); + modifiedRequest.RequestUri = new Uri(request.RequestUri, response.Headers.Location); + request = modifiedRequest; + } + + response = await base.SendAsync(request, cancellationToken); + } + while (response.StatusCode == HttpStatusCode.Redirect); + + return response; + } + } +} |