Como obter o HttpClient para passar as credenciais junto com a solicitação?
Eu tenho um aplicativo da web (hospedado no IIS) que fala com um serviço do Windows. O serviço do Windows está usando a API da Web do ASP.Net MVC (auto-hospedado) e, portanto, pode ser comunicado com o http usando JSON. O aplicativo da Web é configurado para fazer representação, a ideia é que o usuário que faz a solicitação para o aplicativo da Web deve ser o usuário que o aplicativo da Web usa para fazer a solicitação para o serviço. A estrutura é assim:
(O usuário destacado em vermelho é o usuário mencionado nos exemplos abaixo.)
O aplicativo da Web faz solicitações para o serviço do Windows usando umHttpClient
:
var httpClient = new HttpClient(new HttpClientHandler()
{
UseDefaultCredentials = true
});
httpClient.GetStringAsync("http://localhost/some/endpoint/");
Isso faz a solicitação para o serviço do Windows, mas não passa as credenciais corretamente (o serviço relata o usuário comoIIS APPPOOL\ASP.NET 4.0
).Não é isso que eu quero que aconteça.
Se eu mudar o código acima para usar umWebClient
em vez disso, as credenciais do usuário são passadas corretamente:
WebClient c = new WebClient
{
UseDefaultCredentials = true
};
c.DownloadStringAsync(new Uri("http://localhost/some/endpoint/"));
Com o código acima, o serviço informa o usuário como o usuário que fez a solicitação para o aplicativo da web.
O que estou fazendo de errado com oHttpClient
implementação que está fazendo com que ele não passe as credenciais corretamente (ou é um bug com oHttpClient
)
A razão pela qual eu quero usar oHttpClient
é que tem uma API assíncrona que funciona bem comTask
s, enquanto oWebClient
A API do asyc precisa ser tratada com eventos.