Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Er zijn gevallen waarin ontwikkelaars meer fijnmazige controle over de instantie van HttpClient willen, zoals het configureren van een proxy of het gebruikmaken van de efficiënte manieren van ASP.NET Core om de HttpClient te poolen. Meer informatie vindt u in het httpClientFactory-document voor het implementeren van tolerante HTTP-aanvragen . Om aan te passen HttpClient, moeten ontwikkelaars implementeren IMsalHttpClientFactory, die MSAL vervolgens gebruikt om een HttpClient voor elke HTTP-aanvraag op te halen.
Implementatierichtlijnen voor IMsalHttpClientFactory
- Zie System.Net.Http.HttpClient voor voorbeelden van schaalbare .NET factory's die kunnen worden aangepast voor deze interface, zoals ASP.NET Core
IHttpClientFactory. - Implementaties moeten threadveilig zijn.
- Maak geen nieuwe
HttpClientinGetHttpClient, omdat dit kan leiden tot poortuitputting. - MSAL zal
Dispose()niet aanroepen op deHttpClient. - Als uw app gebruikmaakt van geïntegreerde Windows-verificatie, moet u ervoor zorgen dat System.Net.Http.HttpClientHandler.UseDefaultCredentials deze is ingesteld op
true.
Voorbeeld van implementatie
IMsalHttpClientFactory httpClientFactory = new MyHttpClientFactory();
var pca = ConfidentialClientApplication.Create("client_id")
.WithHttpClientFactory(httpClientFactory)
.Build();
Een eenvoudige implementatie van IMsalHttpClientFactory
public class StaticClientWithProxyFactory : IMsalHttpClientFactory
{
private static readonly HttpClient s_httpClient;
static StaticClientWithProxyFactory()
{
var webProxy = new WebProxy(
new Uri("http://my.proxy"),
BypassOnLocal: false);
webProxy.Credentials = new NetworkCredential("user", "pass");
var proxyHttpClientHandler = new HttpClientHandler
{
Proxy = webProxy,
UseProxy = true,
};
s_httpClient = new HttpClient(proxyHttpClientHandler);
}
public HttpClient GetHttpClient()
{
return s_httpClient;
}
}
HttpClient en Xamarin iOS
Wanneer u Xamarin iOS gebruikt, is het raadzaam om een HttpClient handler te maken die expliciet gebruikmaakt van de NSURLSessionhandler op basis van iOS 7 en hoger. MSAL.NET maakt automatisch een HttpClient dat NSURLSessionHandler gebruikt voor iOS 7 en nieuwer. Lees de Xamarin iOS-documentatie voor HttpClient voor meer informatie.
Troubleshooting
Probleem: In een bureaubladtoepassing gebruikt de autorisatie-ervaring niet de HttpClient die ik heb gedefinieerd
Solution:
In desktop- en mobiele apps opent MSAL een browser en navigeert naar de autorisatie-URL. Het maakt geen gebruik van HttpClient wanneer u de ingesloten browser gebruikt, u kunt de proxy hiervoor beheren door de techniek te volgen op: https://blogs.msdn.microsoft.com/jpsanders/2011/04/26/how-to-set-the-proxy-for-the-webbrowser-control-in-net/ Dit kan niet worden uitgevoerd op .NET Core, waarbij alleen de systeembrowser beschikbaar is. MSAL heeft geen controle over de systeembrowser.
Probleem: Mijn browser kan verbinding maken met de proxy, maar ik krijg HTTP 407-fouten van MSAL
Oplossing: HTTP 407 toont een probleem met proxyverificatie. .NET framework maakt gebruik van de proxy-instellingen van IE, die standaard niet de instelling UseDefaultCredential bevat. Sommige gebruikers hebben gemeld dat dit probleem is opgelost door het volgende toe te voegen aan hun .config-bestand:
<system.net>
<defaultProxy enabled="true" useDefaultCredentials="true" />
</system.net>