我有一个与 Windows 服务对话的 Web 应用程序(托管在 IIS 中)。Windows 服务使用 ASP.Net MVC Web API(自托管),因此可以使用 JSON 通过 http 进行通信。Web 应用程序被配置为进行模拟,其想法是向 Web 应用程序发出请求的用户应该是 Web 应用程序用来向服务发出请求的用户。结构如下所示:
(以红色突出显示的用户是以下示例中提到的用户。)
Web 应用程序使用以下命令向 Windows 服务发出请求HttpClient
:
var httpClient = new HttpClient(new HttpClientHandler()
{
UseDefaultCredentials = true
});
httpClient.GetStringAsync("http://localhost/some/endpoint/");
这会向 Windows 服务发出请求,但不会正确传递凭据(服务将用户报告为IIS APPPOOL\ASP.NET 4.0
)。这不是我想要发生的。
如果我将上面的代码更改为使用 a WebClient
,则用户的凭据将正确传递:
WebClient c = new WebClient
{
UseDefaultCredentials = true
};
c.DownloadStringAsync(new Uri("http://localhost/some/endpoint/"));
使用上面的代码,服务将用户报告为向 Web 应用程序发出请求的用户。
我做错了什么HttpClient
导致它无法正确传递凭据(或者它是一个错误HttpClient
)?
我想使用的原因HttpClient
是它有一个与Task
s 配合得很好的异步 API,而 的WebClient
异步 API 需要用事件来处理。