如何创建服务绑定 HttpClient 的实例?



我的服务中托管了身份服务器 4。它公开了各种端点,我想从同一服务访问token端点。 它不公开任何接口,所以我可以将其作为依赖项注入,因此我必须发出 http 请求。

现在我像这样设置HttpClient的网址:

var req = _contextAcessor.HttpContext.Request;
var baseAddr = $"{req.Scheme}://{req.Host}";
client.BaseAddress = new Uri(baseAddr);
var addr = _urlHelperProvider.GetUrlHelper().Content("~/connect/token");

我不喜欢它,因为这里甚至没有使用localhost。但是服务可能绑定到本地主机上的不同端口,我不知道如何将 url 列表传递给UseUrls方法。

理想情况下,我希望将客户端实例绑定到我的服务,类似于它与WebApplicationFactory.CreateClient方法的工作方式。

希望在这里找到答案,但最终让它工作 所以希望这可能会帮助某人

创建客户端时,使用 https 设置主机通常很有帮助 它应该等于在本地运行应用程序时默认拥有的任何主机

_factory = new WebApplicationFactory<Startup>().WithWebHostBuilder(BuildHost);
Client = _factory.CreateClient(new WebApplicationFactoryClientOptions()
{
BaseAddress = new System.Uri("https://localhost:5031")
});

那么你的要求很简单:

var parameters = new Dictionary<string, string> { { "grant_type", "client_credentials" },
{ "scope", "SomeScope" }, 
{ "client_id", "YourClientId" }, { "client_secret", "yoursecret" } };

var encodedContent = new FormUrlEncodedContent(parameters);
var response = await Client.PostAsync("/connect/token", encodedContent);

在本地测试过它并且可以工作 如果您的设置仍有任何问题,请告诉我, 应该能够提供帮助

最新更新