【问题标题】:How to make HttpClient to use the app pool identity如何使 HttpClient 使用应用程序池标识
【发布时间】:2019-05-13 14:08:36
【问题描述】:

我正在尝试使用网站 A 的身份从网站 A 向网站 B 发起 http 调用。

使用 .Net fwk 4.x,我只需要做这样的事情:

using (var client = new HttpClient(new HttpClientHandler { UseDefaultCredentials = true }) {
   // Do something
}

在 aspnetcore 2.2 中,提供了一个 IHttpClientBuilder 来管理 http 客户端。

相同的代码应该看起来像这样:

services.AddHttpClient("myOtherSite", httpClient => {
                httpClient.BaseAddress = new Uri("http://something");
            })
            .ConfigurePrimaryHttpMessageHandler(() => new HttpClientHandler {
                UseDefaultCredentials = true
            });

然后我只需要在需要客户端的地方注入 IHttpBuilder 然后调用 clientBuilder.buildClient("myOtherSite")。

使用这个,http 请求似乎是在没有池用户的情况下发出的,尽管有文档..

有人做过这样的事吗?

【问题讨论】:

  • 改用什么身份?
  • Myothersite 收到匿名电话。它与 .Net 4.7 配合得很好,我绝对看不到我缺少什么......
  • 根据this HttpClientHandler 不再是 .NET Core 2.1 的默认实现。除非您设置显式开关,否则不会使用它。
  • 感谢您的提示!不幸的是,我无法使用 SocketsMessageHandler 使其工作。刚刚在这里问:github.com/dotnet/corefx/issues/37665
  • 您是否尝试通过设置上下文切换来强制它使用 HttpClientHandler ?

标签: c# .net-core asp.net-core-2.2


【解决方案1】:

我不确定这是否是您的问题,但 Microsoft Documentation 声明从核心 2.1 开始,将使用 System.Net.Http.SocketsHttpHandler 类。

它包含有关如何配置以允许继续使用 HttpClientHandler 的信息,但您可能想要切换甚至尝试使用 HttpMessageHandler 代替您当前用于处理程序的类型。

【讨论】:

    猜你喜欢
    • 2014-05-14
    • 1970-01-01
    • 1970-01-01
    • 2011-10-03
    • 1970-01-01
    • 2017-12-15
    • 2013-04-09
    • 2011-10-18
    • 1970-01-01
    相关资源
    最近更新 更多