-
Notifications
You must be signed in to change notification settings - Fork 262
Closed
Labels
Description
Issue
Due to HttpClientHandler's limitations described in issues #413, we need to configure our pipeline to use optimized native Http handlers for Xamarin.Android (AndroidClientHandler) and Xamarin.iOS (NSUrlSessionHandler) as our final handler.
Workaround
The workaround involves setting up a new pipeline for each platform with the platforms native http handler set as the finalHandler. This is cumbersome and can be error prone if not configured correctly.
#if __ANDROID__
var innerHandler = new Xamarin.Android.Net.AndroidClientHandler { AllowAutoRedirect = false };
var pipeline = GraphClientFactory.CreatePipeline(GraphClientFactory.CreateDefaultHandlers(authProvider), innerHandler);
httpProvider = new HttpProvider(pipeline, true, new Serializer());
#elif __IOS__
var innerHandler = new NSUrlSessionHandler { AllowAutoRedirect = false };
var handlers = GraphClientFactory.CreateDefaultHandlers(authProvider);
// Remove CompressionHandler from pipeline when using NSUrlSessionHandler.
handlers.Remove(handlers.FirstOrDefault((h) => h.GetType().Equals(typeof(CompressionHandler)))); // We need to provide a method to remove handlers by type.
var pipeline = GraphClientFactory.CreatePipeline(handlers , innerHandler);
httpProvider = new HttpProvider(pipeline, true, new Serializer());
#else // UWP
httpProvider = new HttpProvider();
#endif
return new GraphServiceClient(authProvider, httpProvider);