Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Zdarzają się sytuacje, w których deweloperzy chcą mieć szczegółową kontrolę nad wystąpieniem HttpClient, na przykład w celu skonfigurowania serwera proxy lub skorzystania z wydajnych mechanizmów ASP.NET Core do tworzenia puli obiektów HttpClient. Więcej informacji można przeczytać w dokumencie HttpClientFactory w celu zaimplementowania odpornych żądań HTTP . Aby dostosować HttpClient, deweloperzy będą musieli zaimplementować IMsalHttpClientFactory, którego biblioteka MSAL następnie użyje do uzyskania HttpClient dla każdego żądania HTTP.
Wytyczne implementacji IMsalHttpClientFactory
- Zobacz System.Net.Http.HttpClient przykłady skalowalnych fabryk .NET, które można dostosować do tego interfejsu, takie jak ASP.NET Core
IHttpClientFactory. - Implementacje muszą być bezpieczne wątkowo.
- Nie utwórz nowego
HttpClientwGetHttpClient, ponieważ doprowadzi to do wyczerpania puli portów. - Biblioteka MSAL nie wywoła
Dispose()w elemencieHttpClient. - Jeśli aplikacja używa zintegrowanego uwierzytelniania Windows, upewnij się, że System.Net.Http.HttpClientHandler.UseDefaultCredentials ustawiono wartość
true.
Przykładowa implementacja
IMsalHttpClientFactory httpClientFactory = new MyHttpClientFactory();
var pca = ConfidentialClientApplication.Create("client_id")
.WithHttpClientFactory(httpClientFactory)
.Build();
Prosta implementacja 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 i Xamarin iOS
Podczas korzystania z Xamarin.iOS zaleca się utworzenie elementu HttpClient, który jawnie używa programu obsługi opartego na NSURLSession dla systemu iOS 7 i nowszych. MSAL.NET automatycznie tworzy obiekt HttpClient, który używa NSURLSessionHandler, w systemie iOS 7 i nowszych. Aby uzyskać więcej informacji, przeczytaj dokumentację Xamarin systemu iOS dla klienta HttpClient.
Troubleshooting
Problem: W aplikacji komputerowej proces autoryzacji nie używa obiektu HttpClient, który zdefiniowałem
Rozwiązanie:
W aplikacjach klasycznych i mobilnych biblioteka MSAL otwiera przeglądarkę i przechodzi do adresu URL autoryzacji. Nie używa składnika HttpClient. W przypadku korzystania z osadzonej przeglądarki można kontrolować dla niej serwer proxy, stosując technikę opisaną tutaj: https://blogs.msdn.microsoft.com/jpsanders/2011/04/26/how-to-set-the-proxy-for-the-webbrowser-control-in-net/ Nie jest to możliwe w .NET Core, gdzie dostępna jest tylko przeglądarka systemowa. Biblioteka MSAL nie ma kontroli nad przeglądarką systemową.
Problem: Moja przeglądarka może nawiązać połączenie z serwerem proxy, ale otrzymuję błędy HTTP 407 z biblioteki MSAL
Rozwiązanie: PROTOKÓŁ HTTP 407 pokazuje problem z uwierzytelnianiem serwera proxy. .NET framework używa ustawień serwera proxy z programu IE, które domyślnie nie zawiera ustawienia "UseDefaultCredential". Niektórzy użytkownicy zgłosili rozwiązanie tego problemu, dodając następujące informacje do pliku .config:
<system.net>
<defaultProxy enabled="true" useDefaultCredentials="true" />
</system.net>