HttpClient.GetAsync z poświadczeniami sieciowymi

93

Obecnie używam HttpWebRequestdo uzyskania witryny internetowej. Chciałbym użyć wzorca await, który nie jest podany HttpWebRequests. Znalazłem klasę HttpClient, która wydaje się być nową klasą roboczą HTTP. Używam HttpClient.GetAsync(...)do odpytywania mojej strony internetowej. Ale brakuje mi opcji dodania ClientCredentialspolubienia HttpWebRequest.Credentials. Czy istnieje sposób na podanie HttpClientinformacji uwierzytelniających?

Jan K.
źródło

Odpowiedzi:

166

Możesz przekazać wystąpienie klasy HttpClientHandler z poświadczeniami do konstruktora HttpClient :

using (var handler = new HttpClientHandler { Credentials = ... })
using (var client = new HttpClient(handler))
{
    var result = await client.GetAsync(...);
}
dtb
źródło
20
Można również ustawić UseDefaultCredentials = truenaHttpClientHandler
Aleksey Polyakov
9
Może to powodować nieoptymalne zachowanie, gdy wymagane jest uwierzytelnianie podstawowe stackoverflow.com/q/25761214/57428
ostry
2
Odkryłem, że będziesz chciał ustawić handler.ClientCertificateOptions = ClientCertificateOption.Automatic, aby faktycznie wysłano kredyty.
Garr Godfrey
4
Zalecane jest użycie statycznej instancji HttpClient, szczególnie w scenariuszach serwerowych
James Westgate,
3
Co więc powinniśmy zrobić w scenariuszach serwerowych? Mamy do czynienia z problemami, które masz, gdy nie masz instancji statycznej, ale musimy przekazać poświadczenia.
Scott Chamberlain