Providing your own HttpClient and proxy using MSAL.NET
When initializing a client application, you can use the .WithHttpClientFactory method
to provide your own HttpClient. Providing your own HttpClient enables advanced scenarios such fine-grained control of an HTTP proxy, customizing user agent headers, or forcing MSAL to use a specific HttpClient (for example in ASP.NET Core web apps/APIs).
HttpClient
is intended to be instantiated once and then reused throughout the life of an application. See Remarks.
Initialize with HttpClientFactory
The following example shows to create an HttpClientFactory
and then initialize a public client application with it:
IMsalHttpClientFactory httpClientFactory = new MyHttpClientFactory();
var pca = PublicClientApplicationBuilder.Create(MsalTestConstants.ClientId)
.WithHttpClientFactory(httpClientFactory)
.Build();
Example implementation using a proxy
public class HttpFactoryWithProxy : IMsalHttpClientFactory
{
private static HttpClient _httpClient;
public HttpFactoryWithProxy()
{
// Consider using Lazy<T>
if (_httpClient == null)
{
var proxy = new WebProxy
{
Address = new Uri($"http://{proxyHost}:{proxyPort}"),
BypassProxyOnLocal = false,
UseDefaultCredentials = false,
Credentials = new NetworkCredential(
userName: proxyUserName,
password: proxyPassword)
};
// Now create a client handler which uses that proxy
var httpClientHandler = new HttpClientHandler
{
Proxy = proxy,
};
_httpClient = new HttpClient(handler: httpClientHandler);
}
}
public HttpClient GetHttpClient()
{
return _httpClient;
}
}
HttpClient and Xamarin iOS
When using Xamarin iOS, it is recommended to create an HttpClient
that explicitly uses the NSURLSession
-based handler for iOS 7 and newer. MSAL.NET automatically creates an HttpClient
that uses NSURLSessionHandler
for iOS 7 and newer. For more information, read the Xamarin iOS documentation for HttpClient.
Feedback
Submit and view feedback for