Как заставить HttpClient передавать учетные данные вместе с запросом?
У меня есть веб-приложение (размещенное в IIS), которое взаимодействует со службой Windows. Служба Windows использует веб-API ASP.Net MVC (самодостаточный), поэтому с ней можно обмениваться данными через http с помощью JSON. Веб-приложение сконфигурировано для выполнения олицетворения, идея в том, что пользователь, который отправляет запрос веб-приложению, должен быть пользователем, которого веб-приложение использует для выполнения запроса к службе. Структура выглядит так:
(The user highlighted in red is the user being referred to in the examples below.)
Веб-приложение отправляет запросы в службу Windows, используяHttpClient
:
var httpClient = new HttpClient(new HttpClientHandler()
{
UseDefaultCredentials = true
});
httpClient.GetStringAsync("http://localhost/some/endpoint/");
Это делает запрос к службе Windows, но не передает учетные данные правильно (служба сообщает пользователю какIIS APPPOOL\ASP.NET 4.0
). This is not what I want to happen.
Если я изменю код выше, чтобы использоватьWebClient
вместо этого учетные данные пользователя передаются правильно:
WebClient c = new WebClient
{
UseDefaultCredentials = true
};
c.DownloadStringAsync(new Uri("http://localhost/some/endpoint/"));
С помощью приведенного выше кода служба сообщает о пользователе как о пользователе, который сделал запрос к веб-приложению.
What am I doing wrong with the HttpClient
implementation that is causing it to not pass the credentials correctly (или это ошибка сHttpClient
)?
The reason I want to use the HttpClient
is that it has an async API that works well with Task
s, whereas the WebClient
's asyc API needs to be handled with events.