diff --git a/src/Mono.Android/Xamarin.Android.Net/AndroidMessageHandler.cs b/src/Mono.Android/Xamarin.Android.Net/AndroidMessageHandler.cs index e5218687ae7..fef5fc2cc03 100644 --- a/src/Mono.Android/Xamarin.Android.Net/AndroidMessageHandler.cs +++ b/src/Mono.Android/Xamarin.Android.Net/AndroidMessageHandler.cs @@ -827,6 +827,7 @@ bool HandleRedirect (HttpStatusCode redirectCode, HttpURLConnection httpConnecti // what to do with the response case HttpStatusCode.TemporaryRedirect: // 307 + case HttpStatusCode.PermanentRedirect: // 308 break; default: diff --git a/tests/Mono.Android-Tests/Xamarin.Android.Net/AndroidMessageHandlerTests.cs b/tests/Mono.Android-Tests/Xamarin.Android.Net/AndroidMessageHandlerTests.cs index b71ee2893da..a98ff834d20 100644 --- a/tests/Mono.Android-Tests/Xamarin.Android.Net/AndroidMessageHandlerTests.cs +++ b/tests/Mono.Android-Tests/Xamarin.Android.Net/AndroidMessageHandlerTests.cs @@ -234,6 +234,20 @@ public async Task ServerCertificateCustomValidationCallback_Redirects () Assert.IsTrue (result.IsSuccessStatusCode); } + [Test] + public async Task AndroidMessageHandlerFollows308PermanentRedirect () + { + int callbackCounter = 0; + + var handler = new AndroidMessageHandler (); + + var client = new HttpClient (handler); + var result = await client.GetAsync ("https://httpbin.org/redirect-to?url=https://www.microsoft.com/&status_code=308"); + + Assert.IsTrue (result.IsSuccessStatusCode); + Assert.AreEqual ("https://www.microsoft.com/", result.RequestMessage.RequestUri.ToString ()); + } + private async Task AssertRejectsRemoteCertificate (Func makeRequest) { // there is a difference between the exception that's thrown in the .NET build and the legacy Xamarin