相关疑难解决方法(0)

如何让HttpClient与请求一起传递凭据?

我有一个与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/");
Run Code Online (Sandbox Code Playgroud)

这会向Windows服务发出请求,但不会正确传递凭据(服务将用户报告为IIS APPPOOL\ASP.NET 4.0).这不是我想要发生的事情.

如果我将上述代码更改为使用WebClient,则会正确传递用户的凭据:

WebClient c = new WebClient
                   {
                       UseDefaultCredentials = true
                   };
c.DownloadStringAsync(new Uri("http://localhost/some/endpoint/"));
Run Code Online (Sandbox Code Playgroud)

使用上述代码,服务将用户报告为向Web应用程序发出请求的用户.

我执行错误HttpClient导致它无法正确传递凭据(或者它是一个错误HttpClient),我做错了什么

我想使用HttpClient它的原因是它有一个与s兼容的异步API Task,而WebClientasyc API需要用事件处理.

c# impersonation windows-security asp.net-web-api

153
推荐指数
6
解决办法
19万
查看次数