У мене є веб-додаток (розміщений в IIS), який спілкується зі службою Windows. Служба Windows використовує веб-API ASP.Net MVC (власний хостинг), і тому можна спілкуватися з http через JSON. Веб-додаток налаштовано на видання себе, ідея полягає в тому, що користувач, який робить запит на веб-додаток, повинен бути користувачем, який використовує веб-додаток для подання запиту в сервіс. Структура виглядає так:
(Користувачем, виділеним червоним кольором, є користувач, про який йдеться у прикладах нижче.)
Веб-додаток робить запити до служби Windows за допомогою HttpClient
:
var httpClient = new HttpClient(new HttpClientHandler()
{
UseDefaultCredentials = true
});
httpClient.GetStringAsync("http://localhost/some/endpoint/");
Це робить запит до служби Windows, але не передає облікові дані правильно (сервіс повідомляє користувача як IIS APPPOOL\ASP.NET 4.0
). Це не те, що я хочу, щоб сталося .
Якщо я зміню вищевказаний код, щоб використовувати WebClient
замість нього, облікові дані користувача передаються правильно:
WebClient c = new WebClient
{
UseDefaultCredentials = true
};
c.DownloadStringAsync(new Uri("http://localhost/some/endpoint/"));
За допомогою наведеного вище коду сервіс повідомляє користувача як користувача, який зробив запит у веб-програмі.
Що я роблю неправильно з HttpClient
реалізацією, яка змушує її неправильно передавати облікові дані (чи це помилка з HttpClient
)?
Причиною, для якої я хочу скористатися, HttpClient
є те, що він має API асинхронізації, який добре працює з Task
s, тоді як WebClient
API asyc API потрібно обробляти подіями.
DownloadStringTaskAsync
.Net 4.5, який також можна використовувати з асинхронізуванням / очікувати
HttpClient
не має SetCredentials()
методу. Чи можете ви вказати мені на те, що ви маєте на увазі?
new HttpClient(new HttpClientHandler() { AllowAutoRedirect = true, UseDefaultCredentials = true }
на веб-сервері, до якого звертався користувач із автентифікацією Windows, і веб-сайт після цього здійснив автентифікацію для іншого віддаленого ресурсу (не встановив автентифікацію без встановленого прапора).